2009-12-03 97 views
1

我一直在使用PHP試驗curl訪問PayPal支付授權網站。PayPal cookies是否鏈接到IP地址?

例如

 
... 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $nvp); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $res = curl_exec ($ch); 

    preg_match_all('/Set-Cookie: .*/', $res, $cookieMatches); 

    foreach ($cookieMatches[0] as $cookieMatch) 
     header($cookieMatch); 

    preg_match('/Location: .*/', $res, $locMatches); 
    header($locMatches[0]); 

    header('Vary: Accept-Encoding'); 
    header('Strict-Transport-Security: max-age=500'); 
    header('Transfer-Encoding: chunked'); 
    header('Content-Type: text/html'); 

的原則就是簡單地反映原始重定向(我相信有更簡單的方法來做到這一點)。但是,PayPal的迴應似乎表明某種cookie錯誤。

我的預感是cookie已經以某種方式與原始機器相連接。任何人都可以證實這一點,或者我只是錯過了明顯的東西!

回答

0

CURL內置了對Cookie的支持(如您所知)。但這很棘手。我沒有管理餅乾工作,直到我宣佈的選項

curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 

第三個參數是存儲cookie文件的名稱 - 最好在臨時文件夾。也許你應該試試這種方法。

有了這個重定向「自動」工作。

+0

謝謝你的建議 - 也應該設置CURLOPT_COOKIEFILE。我最初嘗試了這種方法,但PayPal賬單細節或登錄提交表單然後失敗。與直接的HTML表單提交相比,瀏覽器中似乎缺少了一些cookie。一個HTTP嗅探器證實了這一點 - 這就是爲什麼我嘗試上述。 – mayfly 2009-12-03 18:11:46

0
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
//SAVE THE COOKIES 
curl_setopt ($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 
USE THE COOKIES 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1'); 
// Follow Where the location will take you, maybe you catch the issue. 

既然它在瀏覽器上工作,它必須使用CURL,除非他們使用javascript來設置cookie。 即使他們使用Cookie取決於IP地址,請嘗試從開始使用curl開始會話,以便使用生成的cookie設置您的服務器IP地址。

+0

向我提供鏈接,您正在嘗試使用一些更多的細節,所以我寫你的代碼。 – Adam 2017-10-25 11:56:35