cURL无法使用重定向网址

时间:2014-04-20 01:01:28

标签: php redirect curl

我正在尝试创建一个跟随网站的cURL脚本,即使进行重定向也是如此。出于某种原因,我的方法似乎适用于大多数网站,但无法重定向。

我一直试图解决这个问题很长一段时间,我很感激为什么这不能正常工作。

我的目标是让脚本遵循重定向并从重定向网址http://www.chinooksailing.com/products/获取内容。

提前致谢!

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.chinooksailing.com/');
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$content = curl_exec($ch);

curl_close($ch);
return $content;

3 个答案:

答案 0 :(得分:1)

简单地,将 -L 选项与 curl 命令一起使用,如下所示:

curl -L http://www.chinooksailing.com

这样,curl 将跟随重定向!

答案 1 :(得分:0)

CuRL未重定向的原因是您请求的站点使用Javascript重定向而不是正常的30x HTTP方法。因为curl不解析页面,所以它不知道它正在重定向。

这是重定向到产品之前网站的源代码。如您所见,它调用一个函数来加载产品页面并离开当前页面。

<body background="img/bg.gif" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onLoad="MM_goToURL('parent','http://www.chinooksailing.com/products/');return document.MM_returnValue">

如果你很好奇我怎么想出来的。我首先加载了Chrome开发者工具,然后导航到原始网址。查看HTTP请求我注意到加载的产品页面的HTTP状态为200,而前一页面没有显示30x的状态,就像它通常显示的是HTTP重定向一样。

然后我使用view-source://的URI方案导航到主页面,以查看原始/主页的源代码。在那里你可以很容易地看到它正在使用javascript重定向。

答案 2 :(得分:0)

来自cURL的官方常见问题解答:

4.14重定向在浏览器中工作,但不是curl!

curl支持HTTP重定向正常(参见第3.8项)。浏览器通常支持至少两种其他方式来执行卷曲不会重定向:

元标记。您可以编写一个HTML标记,该标记将导致浏览器在一定时间后重定向到另一个给定的URL。

的Javascript。您可以编写嵌入HTML页面的Javascript程序,将浏览器重定向到另一个给定的URL。

没有办法让卷曲跟随这些重定向。您必须手动确定页面设置要执行的操作,或者编写一个解析结果并获取新URL的脚本。

请参阅:http://curl.haxx.se/docs/faq.html#Redirects_work_in_browser_but_no

您尝试重定向的网页是使用javascript重定向。

我可以问为什么你不直接写http://www.chinooksailing.com/products/