我正在尝试创建一个跟随网站的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;
答案 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的官方常见问题解答:
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/?