0

Iはリダイレクト(301、302)とadf.lyなどのような特殊なURLを迂回するためにカールを使用しています。私は、作業コードを持っているが、私はこの特定の問題解決ができませんでした:私はいくつかのウェブサイト上で、locationパラメータに従うようにcURLを使用している場合は、最後のリダイレクトがそのLocation:結果で相対URLを有することができるcURLのは相対的な「場所」を返しますか?

を。

それを明確にするために、私は自分自身のウェブサイトでは、そのようなリダイレクトを追加しました。私はそれを実証するために私のPHPコードで

header("Location: /maintenance"); exit(); 

を使用しています。

$url = "http://deci.deals/post/99/comment/427"; 

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_FAILONERROR, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1712.4 Safari/537.36'); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
$data = curl_exec($ch); 
curl_close($ch); 

echo("<br/>CURRENT_URL: ".$url); 

if (preg_match_all('/Location:\s*(.+)\s*$/im', $data, $matches, PREG_SET_ORDER)) { 
    $last = array_pop($matches); 
    echo "<br/>FOUND: ".$last[1]; 
} 

出力:

CURRENT_URL: http://deci.deals/post/99/comment/427 
FOUND: /maintenance 

はあなたが見ることができるように、Location値は相対URLである私は、このクイックcURLの要求を行いました。これの代わりに絶対URLを取得する方法はありますか?

ありがとうございます!

+1

エコーcurl_getinfo($ chを、CURLINFO_EFFECTIVE_URL)。 Robot70感謝@ – Robot70

+0

! 'Location'の結果の代わりにこのURLを信頼するのは安全でしょうか? –

+0

私は知らない。それはあなた次第です。 – Robot70

答えて

0

thisウィキペディアのページから:

相対URLスキームやホストを含​​まないURLです。それらは 元の要求のURLと組み合わせなければならないと理解されるべき ために。 http://www.example.com/blogため

クライアントの要求:

GET /blog HTTP/1.1 
Host: www.example.com 

サーバーの応答:

HTTP/1.1 302 Found 
Location: /articles/ 

場所のURLを

01にクライアントによって展開されます
http://www.example.com/articles/ 
+0

私はそれらを接続することを考えていましたが、私は 'CURLOPT_FOLLOWLOCATION'が先にリダイレクトを「ジャンプ」して元のURLに頼るのは不可能だと思っています。 –

関連する問題