卷曲重定向:为什么FOLLOWLOCATION不遵循正确的DOMAIN

时间:2010-09-05 13:49:36

标签: php curl

我正在尝试抓一个网站,但我试图抓取的页面包含重定向到另一个页面。我在卷曲上放置了FOLLOWLOCATION参数但是我到达了一个网址http://localhost/....pageredirected.php等等

问题是重定向有效但DOMAIN不正确(因为它不是我的页面)。这是代码:

<?php
// create a new CURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "http://voli.govolo.it/etape1.cfm?ref=2008052701&destination=484&Provenance=320&Date_Depart=11/9/2010&Date_Retour=18/9/2010&AllerRetour=1&Adultes=1&ENFANTS=0&BEBES=0&dated=110910&dater=180910&TypeClasse=0&langue=it");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);    

// grab URL and pass it to the browser
$esito = curl_exec($ch);
print_r(curl_getinfo($ch));
echo $esito;
// close CURL resource, and free up system resources
curl_close($ch);
?>

页面将重定向是etape1.cfm到etape2.cfm,但我得到404错误,因为我看到http://localhost/scraping/etape2.cfm?...而不是http://voli.govolo.it/etape2.cfm?...

为什么FOLLOWLOCATION不遵循正确的DOMAIN(http://voli.govolo.it)?

1 个答案:

答案 0 :(得分:0)

问题不在于卷曲。第一个网址发送的部分内容是:

<script language="JavaScript" type="text/javascript">
<!--

    function historyDeleteAndRedirect()
    {

        window.location.replace('etape2.cfm?ref=2008052701&destination=484&Provenance=320&Date_Depart=11/9/2010&Date_Retour=18/9/2010&AllerRetour=1&Adultes=1&ENFANTS=0&BEBES=0&dated=110910&dater=180910&TypeClasse=0&langue=it');


    //alert(window.location.href);
    //alert(document.referrer);
    }

//-->
</script>

由于你没有以正常方式访问网站,这个javascript打破了,因为你真的打“localhost”而不是“WhateverSiteThisIs.com”。请记住,curl适用于服务器。所以你正在点击"http://localhost/etape1.cfm?.....。由于.replace()不是绝对网址,因此您的浏览器正在执行正确的操作并重新使用localhost