我知道使用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以编程方式跟踪所有重定向?
答案 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
我会在这里复制,但我不想抄袭