2011-05-12 131 views
6

今天我試圖做一些論壇登錄的cron工作來檢查在線統計信息。 login.php腳本接受一個帶有表單提交值的ajax請求:用戶,密碼,服務器和哈希ID(在隱藏字段中)。我已經可以將這些值提交給登錄腳本,並使用cookie jar保存會話,但是當我嘗試傳遞所需的參數(來自sendlogin.php)時,它似乎拒絕未提供正確請求標頭的請求。所以我需要知道如何使用cURL來模擬:PHP:使用cURL模擬XHR

GET login.php?user=foo&password=bar&server=1&id=7131c359e534e3790eaefa495d621b2a HTTP/1.1 

Host: someloginserver.com 
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 
Accept: application/json, text/javascript, */*; q=0.01 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip, deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 115 
Connection: keep-alive 
X-Requested-With: XMLHttpRequest 
Referer: http://someloginserver.com/sendlogin.php 
Cookie: __cfduid=de2fe207593d1135fc2426fb06e3270741303115848; hellobar_current=1300711502; hellobar_1300711502_variation=11462; PHPSESSID=cc621c6f57c43130d51d3147e319d8c2 

希望你能幫助我解決這個問題。

+0

通過相關頭中'curl_setopt($ curlHandle, 'CURLOPT_HTTPHEADER',$ headersArray);'。打開詳細的捲曲記錄。修改,直到標題cURL輸出符合您的預期。 – 2011-05-12 01:42:25

回答

9

在PHP API捲曲你可以使用:

curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    "Host" => "someloginserver.com", 
    "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1", 
    "Accept" => "application/json, text/javascript, */*; q=0.01", 
    "Accept-Language" => "en-us,en;q=0.5", 
    "Accept-Encoding" => "gzip, deflate", 
    "Accept-Charset" => "ISO-8859-1,utf-8;q=0.7,*;q=0.7", 
    "Keep-Alive" => "115", 
    "Connection" => "keep-alive", 
    "X-Requested-With" => "XMLHttpRequest", 
    "Referer" => "http://someloginserver.com/sendlogin.php" 
)); 

但你的實際問題,可能是餅乾:,它上面我排除在外。用COOKIEJAR設置您的cURL請求。創建一個人造請求以獲取當前會話值,並且僅在事後發送您的實際XHR請求。

+0

好像你說的對我來說,誰會在cookie上出現問題。我發現,在sendlogin.php中,有一個JavaScript文件,添加2個新的cookie變量:hellobar_current和hellobar_1300711502_variation所以現在的問題是,我如何包括thos javascript添加cookie值到cookie jar? – VeeBee 2011-05-12 04:36:58

+0

您可以重新使用Firefox的預先存儲的Cookie文件,也可以使用'CURLOPT_COOKIE'手動注入其他兩個文件。我懷疑那兩個cookie是自相關的。 – mario 2011-05-12 05:16:26

+0

好吧,現在我可以注入額外的cookie,但它們似乎並未保存在cookiejar中。這裏是我的代碼片段:http://pastebin.com/FZb9mfKZ – VeeBee 2011-05-12 07:08:55

10

該數組格式不起作用。 Curl不接受關聯數組。每個元素必須是以下格式的字符串:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     "Host: www.somehost.com", 
     "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1", 
     "Accept: application/json, text/javascript, */*; q=0.01", 
     "Accept-Language: en-us,en;q=0.5", 
     "Accept-Encoding: gzip, deflate", 
     "Connection: keep-alive", 
     "X-Requested-With: XMLHttpRequest", 
     "Referer: http://www.somehost.com/" 
    )); 
+0

這是正確的。 – andreszs 2014-09-04 01:57:49