[英]follow redirects with curl in php
我知道使用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將包含最終目的地的網址,可以是www.example2.com。 我希望我的上述理解是正確的。 如果沒有,請告訴我!
我的主要問題是,所有類型的重定向cURL能夠知道什么? Apache重定向,javascript重定向,形成子重定向,元刷新重定向!?
更新感謝您的回答@ceejayoz和@Josso。 那么有沒有一種方法可以通過PHP以編程方式跟蹤所有重定向?
cURL不會遵循JS或元標記重定向。
我知道這個答案有點晚了,但我遇到了類似的問題,需要的不僅僅是關注HTTP 301/302狀態重定向。 所以我寫了一個小型庫,它也將遵循rel = canonical和og:url meta標簽。
https://github.com/mattwright/URLResolver.php
我發現元刷新標簽沒有提供太多好處,但是如果沒有返回head或body html標簽,則會使用它們。
我剛剛在php網站上找到了這個。 它解析響應以查找重定向並跟蹤它們。 我不認為它獲得了所有類型的重定向,但它非常接近
http://www.php.net/manual/en/ref.curl.php#93163
我在這里復制,但我不想抄襲
據我所知,它只跟隨HTTP Header重定向。 (301和302)。
curl是一個多協議庫,它只提供一點HTTP支持,但對你的情況沒什么幫助。 您可以手動掃描元刷新標記作為變通方法。
但更好的想法是檢查PEAR HTTP_Request或Zend_Http類,這更可能已經提供了類似的東西。 另外phpQuery可能是相關的,因為它帶有自己的http函數,但如果有需要可以輕松->find("meta[refresh]")
。 或者尋找類似Mechanize的瀏覽器類: 是否有與Perl的WWW :: Mechanize等效的PHP?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.