2011-06-10 140 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