cURL - 如何获取最后一个重定向地址

时间:2014-03-28 11:49:12

标签: php curl

我在php中写了一些代码。 我想在这个网站上获得最后的重定向地址: fluege.de

我发布的是;

        $dep= "sFlightInput[accDep]=ZRH";
        $arr= "sFlightInput[accArr]=VIE";
        $depregion= "sFlightInput[accDepRegion]=";
        $arrregion= "sFlightInput[accArrRegion]=";
        $multidep= "sFlightInput[accMultiAirportDep]=ZRH";
        $multiarr= "sFlightInput[accMultiAirportArr]=ZRH";
        $ftype = "sFlightInput[flightType]=RT";
        $depcity = "sFlightInput[depCity]=Zürich+-+Flughafen+(ZRH)+-+Schweiz";
        $arrcity = "sFlightInput[arrCity]=Wien+-+Internationaler+Flughafen+(VIE)+-+Österreich";
        $sdate = "sFlightInput[departureDate]=29.03.2014";
        $srange = "sFlightInput[departureTimeRange]=2";
        $rdate ="sFlightInput[returnDate]=05.04.2014";
        $rrange = "sFlightInput[returnTimeRange]=2";
        $adt = "sFlightInput[paxAdt]=1";
        $chd ="sFlightInput[paxChd]=0";
        $inf = "sFlightInput[paxInf]=0";
        $cabin = "sFlightInput[cabinClass]=Y";
        $airline = "sFlightInput[depAirline]=";
        $send = $dep.$arr.$depregion.$arrregion.$multidep.$multiarr.$ftype.$depcity.$arrcity.$sdate.$srange.$rdate.$rrange.$adt.$chd.$inf.$cabin.$airline;

我用这个;

echo getLastEffectiveUrl("http://www.fluege.de/flight/wait/".$send);

还有功能

function getLastEffectiveUrl($url)
{
    // initialize cURL
    $curl = curl_init($url);
    curl_setopt_array($curl, array(
        CURLOPT_RETURNTRANSFER  => true,
        CURLOPT_FOLLOWLOCATION  => true,
    ));

    // execute the request
    $result = curl_exec($curl);

    // fail if the request was not successful
    if ($result === false) {
        curl_close($curl);
        return null;
    }

    // extract the target url
    $redirectUrl = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);
    curl_close($curl);

    return $redirectUrl;
}

他们的代码必须提供此网址; www.fluege.de/wait/?accDep=&accArr=&accDepRegion=&accArrRegion=&accMultiAirportDep=&accMultiAirportArr=&flightType=RT&depCity=Z%FCrich+-+Flughafen+%28ZRH%29+ - +瑞士&安培; arrCity =维恩+ - + Internationaler +邻近机场+%28VIE%29 + - +%D6sterreich&安培; departureDate = 2014年4月4日&安培; departureTimeRange = 2及returnDate = 2014年4月20日&安培; returnTimeRange = 2及paxAdt = 1&安培; paxChd = 0&安培; paxInf = 0&安培; cabinClass = Y&安培; depAirline =

但我需要;

http://www.fluege.de/flight/encodes/sFlightInput/5f8ccad612bafb69e7693f04cfaf1458/(等)

1 个答案:

答案 0 :(得分:0)

您提供的代码不会处理Cookie,因此,如果您要查询的网站需要此代码,则您的代码无法正常运行。

我检查了http://php.net/manual/en/function.curl-setopt.php,但似乎cURL无法将Cookie存储在内存中。通过在curl_setopt_array下添加以下行,Cookie将保存在临时文件中:

CURLOPT_COOKIEJAR => tempnam(sys_get_temp_dir(), 'cookiejar'),

但是,我没有得到你的具体案例。我注意到您创建的URL不包含问号,并且您的脚本创建的URL根本不会重定向;它以200 OK返回。我使用以下shell命令检查了这个:

curl -LI 'http://www.fluege.de/flight/wait/sFlightInput\[accDep\]=ZRHsFlightInput\[accArr\]=VIEsFlightInput\[accDepRegion\]=sFlightInput\[accArrRegion\]=sFlightInput\[accMultiAirportDep\]=ZRHsFlightInput\[accMultiAirportArr\]=ZRHsFlightInput\[flightType\]=RTsFlightInput\[depCity\]=Zürich+-+Flughafen+(ZRH)+-+SchweizsFlightInput\[arrCity\]=Wien+-+Internationaler+Flughafen+(VIE)+-+ÖsterreichsFlightInput\[departureDate\]=29.03.2014sFlightInput\[departureTimeRange\]=2sFlightInput\[returnDate\]=05.04.2014sFlightInput\[returnTimeRange\]=2sFlightInput\[paxAdt\]=1sFlightInput\[paxChd\]=0sFlightInput\[paxInf\]=0sFlightInput\[cabinClass\]=YsFlightInput\[depAirline\]='

如果不清楚网址的外观,请联系fluege.de询问如何使用其API。