2017-01-09 12 views
1

以下のコードスニペットは、cURLを使用してリダイレクトURLから最終的なURL(media/zip/rarファイルがあります)を取得します。それは最終的なURLを取得しますが、疑いはありませんが、URLの取得に時間がかかるファイルのサイズによって異なります。cURLリダイレクトURLの最終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; 
} 
?> 

私は与えられたリダイレクトURLから、最終的なURLを取得したいので、私はfile_get_content()を使用傾けます。

要するに、結果をダウンロードせずにリダイレクトURLから最終的なURLを取得する方法。

私はそれを明確にします。どんな助けもありがとう。

答えて

0

これはCURLINFO_EFFECTIVE_URLで問題なく動作しますが、オプションのCURLOPT_FOLLOWLOCATIONTRUEに設定する必要があります。これは、CURLINFO_EFFECTIVE_URLが言うことを正確に返すという根拠に基づいています。 CURLOPT_FOLLOWLOCATION=Falseの場合、有効なURLにはurlが要求され、そうでない場合は、それがリダイレクトされる最終的なURLになります。

curl_getinfoを使ってこれを行いました。これも、あなたはあなたのユースケースに応じて、CURLINFO_REDIRECT_URLまたはCURLINFO_EFFECTIVE_URLを使用することができます私の最後の転送

<?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 
} 
?> 

または

に関する情報を提供します。 refer 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

しかし、リダイレクトする必要はありません。リダイレクトURLを取得します。 –

+0

上記のコードを実行してください。 falseに設定すると、動作していません。そして私はそれを言うことを意味した、私達が場所をたどったら私達は最終的/最後の有効なurlを得る。 –

関連する問題