【发布时间】:2011-04-25 12:56:22
【问题描述】:
我想获取 AJAX 请求生成的数据。在此页面http://www.fipe.org.br/web/index.asp?p=51&aspx=/web/indices/veiculos/default.aspx 中有一些 html 选择。当用户点击第一个(Marca)时,第二个被填充。我想得到这个数据。
这是我的代码:
<?php
$curl = curl_init();
$postData = array('ddlAnoValor' => 0,
'ddlMarca' => 1,
'ddlModelo' => 0,
'ddlTabelaReferencia' => 123,
'txtCodFipe' => '');
$result = null;
$httpResponse = null;
curl_setopt($curl, CURLOPT_URL, 'http://www.fipe.org.br/web/indices/veiculos/default.aspx?p=51');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_REFERER, 'http://www.fipe.org.br/web/indices/veiculos/introducao.aspx');
curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
$result = curl_exec($curl);
$httpResponse = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if($httpResponse == '404') {
throw new exception('This page doesn\'t exists.');
}
echo $result;
curl_close($curl);
?>
页面请求头
Host: www.fipe.org.br
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.13) Gecko/20100916 Iceweasel/3.5.13 (like Firefox/3.5.13)
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
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
X-MicrosoftAjax: Delta=true
Cache-Control: no-cache, no-cache
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Referer: http://www.fipe.org.br/web/indices/veiculos/default.aspx?p=51
Content-Length: 9415
Cookie: __utma=106123796.1351303072.1287075522.1287075522.1287075522.1; __utmb=106123796; __utmc=106123796; __utmz=106123796.1287075522.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); ASPSESSIONIDAADQDQRD=EKBEJHEDKCIOAAHNFFMLGMKO
Pragma: no-cache
但我总是得到表格作为结果。我尝试设置 cookie,但 cookies.txt 文件始终为空。我不知道是否需要此 cookie。 cookies.txt 有 777 权限。我究竟做错了什么?谢谢。
【问题讨论】:
-
您应该使用LiveHTTPHeaders 或 Firebug 之类的东西来找出正在进行的 AJAX 调用的确切内容(即:URL、请求方法等)并使用 cURL 重现它。
-
我是用萤火虫做的。我不知道怎么了。谢谢。
-
表单会向与自身相同的 URL 发送 AJAX 请求似乎很不寻常,但我无法检查(在无法安装任何东西的公共计算机上)
-
我已经用请求标头信息更新了问题。谢谢。