我需要一些帮助来设置页面的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不会在cURL请求的标头中显示任何Cookie。因此,我使用了CURLOPT_COOKIE和一些preg_matches来手动获取cookie并将它们一起发送(这是有效的)。
后期变量也是正确的。
然而,当我回复$data
时,它仍然抱怨服务处于离线状态,当然这可能是这种情况,但是当访问页面并手动输入一些数据时,它可以很好地工作。
那么,有什么我想念的吗?我似乎无法使用cURL加载正确的页面。
任何帮助都将不胜感激。
答案 0 :(得分:2)
使用不同的来源,SSL干扰了获得正确的响应。它适用于给定的示例。谢谢你的想法。
答案 1 :(得分:0)
是否有任何可能不会出现卷曲的重定向?特别是在PHP安全模式下,php不会遵循重定向,导致curl_exec返回空字符串。 检查安全模式和位置:原始响应中的标题。