在php中跟随curl重定向

时间:2010-12-15 20:35:52

标签: php curl

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

示例:

$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将包含最终目的地的网址,可以是www.example2.com。 我希望我的上述理解是正确的。如果没有,请告诉我!。

我的主要问题是,所有类型的重定向cURL能够知道什么? Apache重定向,javascript重定向,形成子重定向,元刷新重定向!?

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

5 个答案:

答案 0 :(得分:9)

cURL不会遵循JS或元标记重定向。

答案 1 :(得分:3)

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

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

我发现元刷新标记不能提供太多好处,但如果没有返回头部或主体html标记,则会使用它们。

答案 2 :(得分:1)

据我所知,它只跟随HTTP Header重定向。 (301和302)。

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

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

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