【发布时间】:2014-06-29 03:34:01
【问题描述】:
我正在尝试从名为“CM/ECF”(Pacer)的网站请求一个受密码保护的页面,以使用 PHP/cURL 查看法庭记录等。
我正在使用一个名为 Tamper Data 的 FireFox 扩展,它允许我查看标头和 POST 数据,然后尝试使用 cURL 复制该请求 PHP。
由于某种原因它不起作用,我不断收到登录请求。我可以正常登录,将 cookie 保存到 cookie jar 并获取“主”页面,但是当我进行第二次 curl 调用时(发送相同的 cookie)到搜索页面,主机将我重定向到登录页面。
两部分问题: 第 1 部分 - 当我使用 TaperData 查看请求页面时发送的 cookie 时,TamperData 向我显示:
PacerUser="xxxxxxxxxxx xxxxxxx";
PacerSession="xxxxxSW8+F/BCzRxxxxxxhYtWpfO4ZR8WTEYbnaeeoVixAp5YnKMWxxxxxx0U8MoEPt2FOxxxxxxx/5B9ujb";
PacerPref="receipt=Y";
PacerClientCode="";
__utma=20643455934534311.139983455.139934505.13998383455.1;
__utmb=206345345.10.13453405;
__utmc=2053453433351;
__utmz=20653453351.1399345345.1.utmcsr=pacer.gov|utmccn=(referral)|utmcmd=referral|utmcct=/cmecf/developer/
但 libcurl 生成的 cookie 文件不包含任何以下划线开头的行。那些是什么?
这是我的浏览器发出的请求,从 TamperData 复制而来:
Host=ecf.almb.uscourts.gov
User-Agent=Mozilla/5.0 (Windows NT 6.3; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0
Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language=en-US,en;q=0.5
Accept-Encoding=gzip, deflate
DNT=1
Cookie=PacerUser="wmasdfasdf ZFBgasdfasdfsdff PacerSession="7rkPasdfasdfasdfasdfasdfsdadfnaeeoVixAp5YnKMW9lokKeq4ss4m0U8MoEPt2FOj2P/51RLh/5B9ujb"; PacerPref="receipt=Y"; PacerClientCode=""; __utma=203145253483351.15234521.13998234523405.139234505.139982345305.1; __utmc=2034533351; __utmz=206453453351.14538105.1.1.utmcsr=pacer.gov|utmccn=(referral)|utmcmd=referral|utmcct=/cmecf/developer/
Connection=keep-alive
Cache-Control=max-age=0
这是我的 PHP
$Headers = array(
"Host: ".$this->CaseFiled_endpoints[$district],
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language: en-US,en;q=0.5",
"Accept-Encoding: gzip, deflate",
"Connection: keep-alive"
);
$url = "https://".$this->CaseFiled_endpoints[$district]."/cgi-bin/CaseFiled-Rpt.pl";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0');
curl_setopt($ch, CURLOPT_HTTPHEADER, $Headers);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, realpath($this->cookiefile));
curl_setopt($ch, CURLOPT_COOKIEFILE, realpath($this->cookiefile));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$answer2 = curl_exec($ch);
return curl_getinfo($ch);
我的代码有什么明显的错误吗?是否有任何其他工具可以使这更容易?吐出 curl 代码的浏览器插件?
【问题讨论】:
-
您可以放心地忽略
*utm*cookie。它们来自谷歌分析和 Adsense。我建议将完整的 http 事务与您的浏览器进行常规浏览以及您的脚本进行比较。 Wireshark 之类的工具虽然非常先进,但可以为您提供完整的网络流供您比较。 -
删除 curl_setopt($ch, CURLOPT_COOKIESESSION, true); - 根据我的答案更新
标签: php cookies curl http-headers httprequest