2017-01-09 71 views
1

下面的代碼片段是使用cURL從重定向URL獲取最終URL(其中包含media/zip/rar文件)。它獲得最終的URL,毫無疑問,但它所做的是根據文件的大小,它隨時間變化以獲取URL。cURL需要很長時間才能獲得重定向URL的最終網址

假設最終URL的文件爲1MB,則需要大約5秒才能檢索。但是,如果該文件大約爲35MB,則需要大約150秒的時間。我認爲cURL正在下載結果並最終從結果中獲取URL。

<?php 
echo get_rurl("x_url");//1.2MB -> 5-10sec 
//echo get_rurl("y_url");//31.6MB -> 150sec 
function get_rurl($url){ 
    // initialize cURL 
    $curl = curl_init($url); 
    curl_setopt_array($curl, array(
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_FOLLOWLOCATION => true, 
    )); 
    // execute the request 
    $result = curl_exec($curl); 
    // fail if the request was not successful 
    if ($result === false) { 
     curl_close($curl); 
     return null; 
    } 
    // extract the target url 
    $redirectUrl = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL); 
    curl_close($curl); 
    return $redirectUrl; 
} 
?> 

我不能使用file_get_content()因爲我只是想從給定的重定向URL最終URL。

簡而言之 - 如何從重定向網址獲取最終到達網址而無需下載結果。

希望我說清楚。任何幫助將不勝感激。

回答

0

此工作正常與CURLINFO_EFFECTIVE_URL,但它的選項CURLOPT_FOLLOWLOCATION必須設置爲TRUE。這是因爲CURLINFO_EFFECTIVE_URL正是它返回的結果,最終得到加載的有效網址。如果CURLOPT_FOLLOWLOCATION=False那麼有效的網址將被請求的網址,否則它將被重定向到的最終網址。

我用curl_getinfo做了這個。這給了我關於最後轉讓

<?php 
echo get_rurl("xurl"); 
//echo get_rurl("yurl"); 
function get_rurl($url){ 
    // initialize cURL 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); //specify your URL 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); //disable follow redirects 
    $http_data = curl_exec($ch); //hit the $url 
    $curl_info = curl_getinfo($ch); 
    return $curl_info['redirect_url'];// extract final url 
} 
?> 

即使你可以用CURLINFO_REDIRECT_URLCURLINFO_EFFECTIVE_URL根據您的使用情況的信息。請參考here

<?php 
    echo get_rurl("xurl"); 
    //echo get_rurl("yurl"); 
    function get_rurl($url){ 
     // initialize cURL 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $url); //specify your URL 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); //disable follow redirects 
     $http_data = curl_exec($ch); //hit the $url 
     return curl_getinfo($ch, CURLINFO_REDIRECT_URL); 
    } 
?> 

希望這對其他用戶也有幫助。

0

根據libcurl的文檔(https://curl.haxx.se/libcurl/c/CURLOPT_FOLLOWLOCATION.html),這與使用CURLOPT_FOLLOWLOCATION => true,時的預期完全相同。您可能想要將其更改爲false。

+0

這是必須是'真正的'這將遵循重定向得到最終的URL –

+0

但你不希望*遵循重定向。你想獲得重定向網址。 –

+0

請嘗試執行上述代碼。通過將其設置爲false,不起作用。我的意思是說,如果我們關注位置,那麼只有我們才能得到最終/最後一個有效的網址。 –

相關問題