2017-03-17 11 views
1

APIを使用してURLを設定します。すべてのURLにリダイレクトがありますが、リダイレクトの回数とURLは不明です。META-refreshを含むCURLによるすべてのリダイレクトを追跡する方法

私がしようとしているのは、パスをトレースして最後のURLを見つけることです。

私は基本的に同じ事を行いたい:http://wheregoes.com/retracer.phpを、私は唯一の私はCURLでそれを行う方法を見つけたが、それはメタリフレッシュされたときに、トレースが停止した最後の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

メタリダイレクトに続くスクリプトを作成する必要があります。あなたが提供したURLはあなたを正しい方向に向けることです。すべてのメタリフレッシュのために、新しいカールリクエストを作成する必要があります。 – Scriptman

+0

はい、分かりました。私は、メタリフレッシュを処理するためのスクリプトに関する助けが必要です。 – StaalCtrl

+0

質問:[PHP:CURLがメタリダイレクトに従うことができますか](http://stackoverflow.com/questions/1820705/php-can-curl-follow-meta-redirects)は役に立ちませんか?どのように使ったのですか? – hassan

答えて

0

だけでなく、3xxクラスとMETAリフレッシュの下で、基本的にはHeader Redirectsとの大きな違いは、ありますが、単に一つの方法は、サーバーに依存している、とするその他の関連クライアント。

と同じくらい長く、サーバーで実行される既知のcURLまたはlibcurlのように、「ヘッダーのリダイレクト」またはhttpリダイレクトの最初のタイプを処理できます。

だから、たくさんの方法でURLを抽出することができます。

手動で処理する必要があります。

1)ウェブページのコンテンツをスクラップします。

2)メタタグからリンクを抽出します。

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']"); 
関連する問題