5

私はcurlを使用してphpにhttpリクエストをどこかのWebサイトに送信させ、CURLOPT_FOLLOWLOCATIONを1に設定してリダイレクトに従うようにしています。では、最終的にどこにリダイレクトされたのかを知るにはどうすればよいでしょうか?

4

4 に答える 4

6

次のようなことができます:

curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); // returns the last effective URL
于 2009-11-06T15:11:22.597 に答える
2
$ch = curl_init( "http://websitethatredirects.com" );
$curlParams = array(
   CURLOPT_FOLLOWLOCATION => true,
);
curl_setopt_array( $ch, $curlParams );
$ret = curl_exec( $ch );
$info = curl_getinfo( $ch );
print $info['url'];

これにより、最終的にリダイレクトされた URL が表示されます。

于 2009-11-06T15:17:36.900 に答える
0

このコード スニペットをテストします。それは私にとってはうまくいきます:

$urls = array(
    'http://www.apple.com/imac',
    'http://www.google.com/'
);

$ch = curl_init();

curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

foreach($urls as $url) {
    curl_setopt($ch, CURLOPT_URL, $url);
    $out = curl_exec($ch);

    // line endings is the wonkiest piece of this whole thing
    $out = str_replace("\r", "", $out);

    // only look at the headers
    $headers_end = strpos($out, "\n\n");
    if( $headers_end !== false ) { 
        $out = substr($out, 0, $headers_end);
    }   

    $headers = explode("\n", $out);
    foreach($headers as $header) {
        if( substr($header, 0, 10) == "Location: " ) { 
            $target = substr($header, 10);

            echo "[$url] redirects to [$target]<br>";
            continue 2;
        }   
    }   

    echo "[$url] does not redirect<br>";
}
于 2016-03-25T11:25:30.547 に答える
-1

最終的な本体が必要ない場合は、次の方法で行うことができます。

と を設定CURLOPT_HEADERCURLOPT_NOBODYます。ヘッダー「Location」が返され、新しい URL が含まれます。その後、必要に応じて新しい URL でリクエストを実行します。

于 2009-11-06T15:09:50.697 に答える