Php 需要有关cURL请求的帮助吗

Php 需要有关cURL请求的帮助吗,php,session,cookies,post,curl,Php,Session,Cookies,Post,Curl,我需要一些帮助来设置对页面的cURL请求。在荷兰,我们有一个“RDW.NL”网站,您可以通过输入车牌号查看车辆的详细信息 对于企业来说,有一个付费的替代方案来请求大量数据,但成本太高(每次请求1050欧元+0.50欧元),因为这只是个人使用和测试目的 最近他们改变了他们的网站,旧的脚本停止工作,所以我决定自己试试,但我有点卡住了 以下是我目前掌握的情况: <?php $ckfile = "/tmp/rdwcookie.txt"; # Setup first URL

我需要一些帮助来设置对页面的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;

?>

在第一个页面中,我尝试保存所有cookies(这是可行的),但是发送CURLOPT_Cookie文件不会在cURL请求的标题中显示任何cookies。因此,我使用CURLOPT_COOKIE和一些preg_匹配来手动获取COOKIE并发送它们(这很有效)

post变量也是正确的

然而,当我回显
$data
时,它仍然抱怨服务处于脱机状态,当然可能是这样,但是当访问页面并手动输入一些数据时,它工作得非常好

那么,我有什么遗漏吗?我似乎找不到正确的卷曲页面


如果有任何帮助,我们将不胜感激。

是否有curl可能无法遵循的重定向?特别是在php安全模式下,php不会遵循导致curl_exec返回空字符串的重定向。
检查安全模式和位置:原始响应中的标题。

使用了不同的源,SSL干扰了获得正确的响应。它在给定的示例中正常工作。谢谢你的思考。

回复不是空的。它返回页面,但我必须缺少一些会话/cookie/标题信息才能正确加载页面。它给出了一个模糊的错误(服务不在线),但当通过浏览器访问页面时,我发现页面正常工作。