PHP Curl - Получить данные, созданные с помощью AJAX - PullRequest
0 голосов
/ 14 октября 2010

Я хочу получить данные, сгенерированные по запросу 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. Cookie.txt имеет разрешение 777. Что я делаю неправильно? Спасибо.

1 Ответ

0 голосов
/ 18 октября 2010

Если вы посмотрите на переменные post (для этого используйте сетевую панель на firebug) при использовании формы на сайте, вы увидите, что она содержит некоторые переменные, которые вы не отправляете вместе с вашим PHP-кодом, например _VIEWSTATEи _EVENTVALIDATION.

Я предполагаю, что они относятся к сеансу, установленному браузером при отображении формы, и я также предполагаю, что если эти и связанные с ними переменные отсутствуют, сервер вернет HTML-код полной страницы, включая форму.

Вы можете попытаться смоделировать эти переменные, но я подозреваю, что вы обречены на провал.

В идеале вы должны связаться с сайтом и спросить их, как вы можете получить информацию, которую вы ищете.Возможно, у них есть веб-сервис, который разоблачает его?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...