2011-05-12 95 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