【问题标题】:cURL not working with redirect URLcURL 不适用于重定向 URL
【发布时间】:2014-04-20 01:01:27
【问题描述】:

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

我已经尝试解决这个问题很长一段时间了,感谢任何关于为什么它不能正常工作的建议。

我的目标是让脚本跟随重定向并从重定向 URL 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;

【问题讨论】:

  • 以上代码将我重定向到http://www.chinooksailing.com/products/。究竟是什么问题?
  • @Shankar,你真的测试过它还是只是说它的重定向?它肯定不会为我重定向。
  • 我在你的curl_exec() 之后添加了一个echo $content;,它起作用了。
  • 你还有其他这样的网址吗?我只是想找到一种模式。

标签: php redirect curl


【解决方案1】:

只需将-L 选项与curl 命令一起使用,如下所示:

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

这样,curl 将跟随重定向!

【讨论】:

    【解决方案2】:

    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 开发者工具,然后导航到原始 URL。查看 HTTP 请求,我注意到加载的产品页面的 HTTP 状态为 200,而上一页没有显示 30x 的状态,就像它通常显示的 HTTP 重定向一样。

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

    【讨论】:

    • 感谢您的回复。有没有办法使用 curl 从 HTML 源获取重定向 URL?
    【解决方案3】:

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

    4.14 重定向在浏览器中有效,但在 curl 中无效!

    curl 很好地支持 HTTP 重定向(参见第 3.8 条)。浏览器通常至少支持另外两种 curl 不支持的重定向方式:

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

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

    没有办法让 curl 跟随这些重定向。您必须手动确定页面设置为做什么,或者编写一个解析结果并获取新 URL 的脚本。

    见:http://curl.haxx.se/docs/faq.html#Redirects_work_in_browser_but_no

    您尝试重定向的网络正在使用 javascript 进行重定向。

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

    【讨论】:

    • 感谢您的回复。因为脚本会自动抓取网站。它自然而然地抓住了http://www.chinooksailing.com/,我知道它重定向到/products 的唯一原因是因为我在我的浏览器中对其进行了测试,但是目标是自动化整个过程并在有重定向URL 时访问...
    • 好吧,在这种情况下,您必须解析结果并找出新的 URL。
    猜你喜欢
    • 2014-12-02
    • 2015-12-30
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2018-08-18
    • 1970-01-01
    相关资源
    最近更新 更多