2017-03-17 36 views
1

我正在使用API​​來返回一組URL,所有URL都有重定向,但有多少重定向以及URL所處的位置未知。如何使用包含META的CURL重新定向所有重定向

所以我想要做的是跟蹤路徑並找到最後一個URL。

我基本上要做到一樣:http://wheregoes.com/retracer.php,但我只需要知道最後的URL

我已經找到一種方法,捲曲做到這一點,但是當它是一個元刷新跟蹤停止。

我看到這個帖子:PHP: Can CURL follow meta redirects但它並沒有幫助我很多。

這是我當前的代碼:

function trace_url($url){ 
    $ch = curl_init($url); 
    curl_setopt_array($ch, array(
     CURLOPT_FOLLOWLOCATION => TRUE, 
     CURLOPT_RETURNTRANSFER => TRUE, 
     CURLOPT_SSL_VERIFYHOST => FALSE, 
     CURLOPT_SSL_VERIFYPEER => FALSE, 
    )); 

    curl_exec($ch); 
    $url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 
    curl_close($ch); 

    return $url; 
} 

    $lasturl = trace_url('http://myurl.org'); 

    echo $lasturl; 
+1

您需要編寫一個遵循元重定向的腳本。您提供的網址指向您正確的方向。對於每個元刷新,您需要提出新的捲曲請求。 – Scriptman

+0

是的,我已經算了很多。我需要一些處理元刷新腳本的幫助。 – StaalCtrl

+0

問題如何[PHP的:可以CURL遵循元重定向](http://stackoverflow.com/questions/1820705/php-can-curl-follow-meta-redirects)沒有幫助?你是如何使用它的? – hassan

回答

0

很好,有Header Redirects之間有很大的區別,這基本上是在3xx類別和META刷新,只是一種方式依賴於服務器上,而其他相關客戶端 。

只要curl或已知的cURL或libcurl在服務器中執行,它可以處理第一種類型'Header redirects'或http重定向。

因此,您可以使用一堆方式提取網址。

您將需要手動處理它。

1)報廢網頁內容。

2)從meta標籤中提取鏈接。

3)抓住這個新的鏈接,如果你想。


從例如:

function trace_url($url){ 
    $ch = curl_init($url); 
    curl_setopt_array($ch, array(
     CURLOPT_FOLLOWLOCATION => TRUE, 
     CURLOPT_RETURNTRANSFER => TRUE, 
     CURLOPT_SSL_VERIFYHOST => FALSE, 
     CURLOPT_SSL_VERIFYPEER => FALSE, 
    )); 

    curl_exec($ch); 
    $url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 
    curl_close($ch); 

    return $url; 
} 

$response = trace_url('http://myurl.org'); 

// quick pattern for explanation purposes only, you may improve it as you like 
preg_match('#\<meta.*?content="[0-9]*\;url=([^"]+)"\s*\/\>#', $response, $links); 

$newLink = $links[1]; 

或如在您對於所提供的解決方案,它是使用simplexml_load_file庫問題中提到。

$xml = simplexml_load_file($response); 
$link = $xml->xpath("//meta[@http-equiv='refresh']");