2010-12-15 78 views
8

我知道使用cURL我可以看到目标网址,指向cURL URL为CURLOPT_FOLLOWLOCATION = true。遵循重定向与卷曲在php

例子:

$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); 

$信息将有最终目的地可以是www.example2.com的URL。 我希望我的上述理解是正确的。请让我知道如果不是!

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

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

+0

你包括所有的JavaScript和元刷新?元刷新是可能的 – ajreal 2010-12-15 21:05:25

+0

@ajreal:Javascript也是[可能](http://pecl.php.net/package/spidermonkey),只是没有合理的努力。 – mario 2010-12-15 21:10:08

回答

9

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

+0

感谢您的回答。我稍微更新了这个问题。谢谢 – jtanmay 2010-12-15 20:42:48

+0

那么有没有一种方式,我可以通过编程方式跟踪所有的重定向通过php – jtanmay 2010-12-15 20:43:06

+0

可能不是一个可靠的方式。你可以相当容易地解析元刷新,但有很多方法可以用JS实现 - 包括对外部.js文件的调用 - 你可能永远无法可靠地捕捉它们。 – ceejayoz 2010-12-15 20:45:30

1

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

+0

感谢您的回答。我稍微更新了这个问题。谢谢 – jtanmay 2010-12-15 20:42:23

1

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

但更好的主意是检查PEAR HTTP_Request或Zend_Http类,它更可能已经提供了类似这样的东西。此外phpQuery可能是相关的,因为它具有自己的http功能,但如果有需要可以很容易地->find("meta[refresh]")。或者寻找一个机械化的浏览器类:Is there a PHP equivalent of Perl's WWW::Mechanize?

2

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

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

我发现元刷新标记没有提供太多的好处,但如果没有返回头部或身体的HTML标记使用它们。

+1

感谢一吨马特。我感谢你的努力。 – 2016-02-04 22:48:30