2011-06-10 143 views
2

我需要一些帮助来设置一个页面的cURL请求。在荷兰,我们有这个网站'RDW.NL',让您有机会通过输入车牌号码来查看车辆的详细信息。需要cURL请求帮助

对于企业来说,有一个支付替代方案来请求大量的数据,但成本太高(每个请求€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 。因此,我使用了一些preg_matches的CURLOPT_COOKIE手动获取cookie并将它们一起发送(此工作)。

此外,后变量是正确的。

但是,当我回复$data时,它仍然抱怨服务处于脱机状态,当然这可能是这种情况,但是当访问该页面并手动输入一些数据时,它完美地起作用。

那么,有什么我失踪?我似乎无法使用cURL加载正确的页面。

任何帮助,将不胜感激。

回答

2

使用不同的来源,SSL干扰获得正确的响应。它适用于给定的例子。感谢您的思考。

0

有没有任何重定向卷曲可能跟不上?特别是在PHP安全模式PHP不会遵循重定向导致curl_exec返回空字符串。 检查安全模式和位置​​:原始响应中的标题。

+0

响应不是空的。它返回页面,但我必须缺少一些会话/ cookie /头信息才能正确加载页面。它给出了一个模糊的错误(服务不在线),但当通过浏览器访问该页面时,显示该页面正常工作。 – 2011-06-11 07:51:11