簡體   English   中英

在php中跟隨curl重定向

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM