2010-08-20 61 views
2

我正在爲沒有它的網站編寫「API」。與CURL一起使用Cookie

基本上,我的PHP代碼登錄到網站,並抓取我需要的數據(兩個不同的傳輸)。

在登錄時,我遇到了一些問題。該網站通過HTTP設置了幾個cookie,我使用CURL的cookie機制捕獲cookie。 這似乎很好地工作,除了他們也試圖通過JavaScript設置一個cookie在相同的響應。

我不需要解析javascript,因爲它們設置的cookie是完全可預測的。 我需要的是以某種方式告訴CURL這個cookie存在,而它仍然保持其他cookie。

幫助? :)


通過捲曲POST提交登錄信息後,我得到這些標題:

HTTP/1.1 200 OKDate: Fri, 20 Aug 2010 09:39:14 GMT 
Server: Apache-Coyote/1.1 
Content-Type: text/html;charset=ISO-8859-1 
Content-Length: 492 
Set-Cookie: JSESSIONID=5DE1F32B3668DABB408BBEA10C28DBD5.testmmf1; Path=/merchantlogin 
Set-Cookie: loginType=M 
Connection: close 

這是頁面內容:

<script type="text/javascript"> 
    var nextyear = new Date(); 
    nextyear.setFullYear(nextyear.getFullYear() + 1); 
    document.cookie = 'login=' + document.referrer + '; expires=' + nextyear.toGMTString(); 
</script> 

通知的套裝 - Cookiedocument.cookie部分。

+0

很奇怪的情況,你能顯示一些源代碼嗎? – Otar 2010-08-20 09:12:44

+0

當然!給我一個秒... – Christian 2010-08-20 09:15:53

回答

1

生成通過代碼cookie文件,並做出請求位置巫之前要求的cookie的選項CURLOPT_COOKIEFILE

+0

我想我正在修復這個就像那樣... – Christian 2010-08-20 13:46:47

+0

你可以混淆東西,接收第一個cookie,將它與生成的一個合併,並與下一個請求發送合併的cookie – canni 2010-08-20 14:04:38

0

添加它只需通過SETOPT您可以設置使用curl_setopt餅乾和CURLOPT_COOKIE選項第一。當然,這樣做會抹去你的其他餅乾,但它們會被取消,對嗎?

如果您可以獲得當前值CURLOPT_COOKIE的保留,則可以用分號附加您的cookie。但是PHP似乎沒有curl_getopt函數。

+0

正如我上面所說,問題是將現有的cookie同時發送到目標服務器。 – Christian 2010-08-20 13:46:07