Мне нужна помощь с настройкой запроса 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.
Буду признателен за любую помощь.