Нужна помощь с запросом cURL - PullRequest
2 голосов
/ 11 июня 2011

Мне нужна помощь с настройкой запроса cURL на страницу. В Нидерландах у нас есть сайт «RDW.NL», который дает вам возможность проверить информацию об автомобиле, введя номерной знак.

Для предприятий существует платная альтернатива для запроса больших объемов данных, но затраты слишком высоки (1050 евро + 0,50 евро за запрос), чтобы заплатить это, поскольку это только для личного использования и только для целей тестирования.

Недавно они сменили свой сайт, и старые скрипты перестали работать, поэтому я решил попробовать сам, но я застрял.

Вот что у меня есть:

<?php

    $ckfile = "/tmp/rdwcookie.txt";

    # Setup first URL
    $ch = curl_init("https://ovi.rdw.nl/Default.aspx");
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); 
    $input = curl_exec($ch);

    # Get VIEWSTATE variable
    preg_match('/id="__VIEWSTATE" value="(.*)" \/>/i', $input, $__VIEWSTATE);   
    preg_match('/Set-Cookie: ISAWPLB{(.*)}={(.*)};/i', $input, $__COOKIES);
    preg_match('/Set-Cookie: ASP.NET_SessionId=(.*);/i', $input, $__ASPNET);

    #echo $input;

    # Set options for RDW Call
    $options = array(
        'ctl00$ctl00$PlaceHolderMainContent$PlaceHolderMainContent$txtKenteken' => '16-JS-GK',
        'ctl00%24ctl00%24PlaceHolderMainContent%24PlaceHolderMainContent%24btnZoeken' => 'Zoeken',
        '__VIEWSTATE' => $__VIEWSTATE[1],
        '__EVENTTARGET' => '',
        '__EVENTARGUMENT' => ''
    );

    #echo file_get_contents($ckfile);

    # Setup second URL
    $ch = curl_init("https://ovi.rdw.nl/VoertuigDetails.aspx");
    curl_setopt($ch, CURLOPT_POST, false);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $options);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_COOKIE, 'ISAWPLB{'.$__COOKIES[1].'}='.$__COOKIES[2].'; ASP.NET_SessionId='.$__ASPNET[1]);
    #curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 
    $data = curl_exec($ch);

    # Echo data 
    echo $data;

?>

На первой странице я пытаюсь сохранить все файлы cookie (что работает), но при отправке CURLOPT_COOKIEFILE не отображаются файлы cookie в заголовках запроса cURL. Поэтому я использовал CURLOPT_COOKIE с некоторыми preg_matches, чтобы вручную получить куки и отправить их вместе (это работает).

Также переменные поста правильные.

Тем не менее, он по-прежнему жалуется, что служба отключена, когда я повторяю $data, это, конечно, может иметь место, но при посещении страницы и вводе некоторых данных вручную работает отлично.

Итак, я что-то упускаю? Не получается загрузить нужную страницу с помощью cURL.

Буду признателен за любую помощь.

Ответы [ 2 ]

2 голосов
/ 17 июня 2011

Использовал другой источник, SSL мешал получению правильного ответа.Он работает правильно с приведенным примером.Спасибо, что подумал.

0 голосов
/ 11 июня 2011

Есть ли перенаправление, за которым скручивание может не следовать?Специально в безопасном режиме php php не будет следовать перенаправлениям, в результате чего curl_exec возвращает пустую строку.Проверьте безопасный режим и местоположение: заголовки в исходном ответе.

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