我正在尝试抓一个网站,但我试图抓取的页面包含重定向到另一个页面。我在卷曲上放置了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)?
答案 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
。