【问题标题】:follow redirects with curl in php在 php 中使用 curl 跟踪重定向
【发布时间】:2011-05-26 04:08:13
【问题描述】:

我知道使用 cURL 我可以看到目标 URL,将 cURL 指向具有 CURLOPT_FOLLOWLOCATION = true 的 URL。

例子:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "www.example1.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
$result = curl_exec($ch);
$info = curl_getinfo($ch); //Some information on the fetch
curl_close($ch);

$info 将具有最终目的地的 url,可以是 www.example2.com。 我希望我的上述理解是正确的。如果没有请告诉我!

我的主要问题是,所有类型的重定向 cURL 都能够知道什么? Apache 重定向、javascript 重定向、表单提交重定向、元刷新重定向!?

更新 感谢@ceejayoz 和@Josso 的回答。那么有没有一种方法可以让我通过 php 以编程方式跟踪所有重定向?

【问题讨论】:

  • 你包括所有的javascript和元刷新吗?元刷新是可能的
  • @ajreal: Javascript 也是 possible,只是没有合理的努力。

标签: php curl


【解决方案1】:

cURL 不会跟随 JS 或元标记重定向。

【讨论】:

  • 那么有没有一种方法可以通过 php 以编程方式跟踪所有重定向
  • 可能不可靠。您可以相当容易地解析出元刷新,但是使用 JS 有很多方法可以做到这一点 - 包括调用外部 .js 文件 - 您可能永远无法可靠地捕获它们。
【解决方案2】:

据我所知,它只遵循 HTTP 标头重定向。 (301 和 302)。

【讨论】:

    【解决方案3】:

    curl 是一个多协议库,它只提供一点 HTTP 支持,但对您的情况没有多大帮助。您可以手动扫描元刷新标记作为解决方法。

    但更好的主意是检查 PEAR HTTP_Request 或 Zend_Http 类,它们很可能已经提供了类似的东西。 phpQuery 也可能是相关的,因为它带有自己的 http 函数,但如果需要,可以轻松地->find("meta[refresh]")。或者寻找类似 Mechanize 的浏览器类:Is there a PHP equivalent of Perl's WWW::Mechanize?

    【讨论】:

      【解决方案4】:

      我知道这个答案有点晚了,但我遇到了类似的问题,需要的不仅仅是遵循 HTTP 301/302 状态重定向。所以我写了一个小型库,它也将遵循 rel=canonical 和 og:url 元标记。

      https://github.com/mattwright/URLResolver.php

      我发现元刷新标签没有太多好处,但如果没有返回 head 或 body html 标签,则使用它们。

      【讨论】:

      • 非常感谢马特。感谢您的努力。
      【解决方案5】:

      我刚刚在 php 网站上找到了这个。它解析响应以查找重定向并跟踪它们。我不认为它会得到所有类型的重定向,但它非常接近

      http://www.php.net/manual/en/ref.curl.php#93163

      我会复制到这里,但我不想抄袭

      【讨论】:

        猜你喜欢
        • 2015-12-07
        • 2012-05-04
        • 1970-01-01
        • 2020-11-17
        • 1970-01-01
        • 2017-08-09
        • 2013-08-30
        • 2016-08-30
        • 1970-01-01
        相关资源
        最近更新 更多