2011-11-11 13 views
4

我试图使用cURL和PHP来下载here的HTML源代码(因为它出现在浏览器中)。但不是实际的源代码,而是返回(元刷新链接设置为0)。使用cURL下载网站的HTML源代码,但得到不同于预期的文件

<html> 
    <head><title>Object moved</title></head> 
    <body> 
     <h2>Object moved to <a href="https://login.live.com/login.srf?wa=wsignin1.0&amp;rpsnv=11&amp;checkda=1&amp;ct=44850&amp;rver=6.1.6195.0&amp;wp=MBI&amp;wreply=http:%2F%2Fwww.windowsphone.com%2Fen-US%2Fapps%2Fea39f002-ac30-e011-854c-00237de2db9e&amp;lc=1033&amp;id=268289">here</a>. 
     </h2> 
    </body> 
</html> 

我试图欺骗引用标题为网站,但它似乎我做错了。代码如下。有什么建议么?由于

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, 'http://www.windowsphone.com/en-US/apps/ea39f002-ac30-e011-854c-00237de2db9e'); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.6 (KHTML, like Gecko) Chrome/16.0.897.0 Safari/535.6'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
curl_setopt($ch, CURLOPT_AUTOREFERER, false); 
curl_setopt($ch, CURLOPT_REFERER, "http://www.windowsphone.com/en-US/apps/ea39f002-ac30-e011-854c-00237de2db9e"); 

$html = curl_exec($ch); 
curl_close($ch); 
+0

我有一种感觉,我回答了这个之前:http://stackoverflow.com/questions/8046907/how-come-i-cant-download-this-webpage-in-python/ – flesk

回答

2
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://www.windowsphone.com/en-US/apps/ea39f002-ac30-e011-854c-00237de2db9e'); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.6 (KHTML, like Gecko) Chrome/16.0.897.0 Safari/535.6'); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); 
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt"); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 
curl_setopt($ch, CURLOPT_REFERER, "http://www.windowsphone.com"); 
$html = curl_exec($ch); 
curl_close($ch); 
echo $html; 
+0

不熟悉这不能解决它。您需要将跟踪位置选项设置为true。 – jli

+0

我正在尝试它,它的工作。 –

+0

我刚刚尝试过它,并返回'对象移动'等。 – jli

6

添加卷曲选项进行重定向:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

如果它是一个元刷新而不是一个HTTP感动头,请参阅: PHP: Can CURL follow meta redirects

正如flesk提到的,你可能还需要存储cookie。

+0

试过了 - didn没有工作 – user954912

+0

我正在写HTML返回到一个单独的文件(稍后阅读)。当我将FOLLOWLOCATION设置为true时,该文件变为空白。 – user954912

+0

这工作正常,如果重定向只是在标题。我只是用你的代码对它进行了测试,并且页面返回一个带有元刷新标签的200 OK。看我的编辑。 – jli

1

问题不在于引用者,而是您需要启用Cookie才能工作。

尝试这样:

curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt"); 
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); 

你必须两次查询页面。首先允许重定向从login.live.com获取cookie,然后再用cookie集查询。