2009-08-31 6 views
2

HEJで、ステータスをリダイレクト/私は現在、かなり大規模なURLの数とそれらのリダイレクトの状態を監視するために、PHPベースのツールに取り組んでいます、そこにPHP

をHTTPレスポンスヘッダを取得します。現在のリダイレクトコードと場所を抽出するためにHTTP応答ヘッダーの内容を取得する最善の方法を見つけるのにかなりの時間を費やしました。これは現時点でどのように行われているのですか:

$resource = fopen($url, 'r'); 
$metadata = stream_get_meta_data($resource); 
$metadata = $metadata['wrapper_data']; 

// Looping through the array to find the necessary fields 

これは私が監視しているURLの95%で機能します。もう少し私はリダイレクトが実行される前に実際のHTMLを解析して解決しました。「このウェブサイトはここに移動しました」のようなものが含まれていたからです。これは非常に強固な解決策ではないようですが、いくつかのケースで役立ちました。

これでも、自動的に確認できない多数のURLが残っています。

Ask Apache HTTP Headers Toolのようなツールは信頼性が高く、リダイレクト情報を取得するにはどうすればよいでしょうか?あなたはまた、すべてのヘッダを取得し、最短たとえば、カールを試してみることができ

+0

http://stackoverflow.com/questions/270918/how-do-you-get-the-http-status-code-for-a-remote-domain-in-php – karim79

+0

申し訳ありませんが、その1つは表示されませんでした同様の質問の一覧にしかし、今ここに新しい解決策があります。 –

答えて

6

は次のようになります。

<?php 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://stackoverflow.com'); 
curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'read_header'); 
curl_setopt($ch, CURLOPT_NOBODY, 1); 
curl_exec($ch); 

function read_header($ch, $string) { 
    print "Received header: $string"; 
    return strlen($string); 
} 

出力:もちろん

[~]> php headers.php 
Received header: HTTP/1.1 200 OK 
Received header: Cache-Control: private 
Received header: Content-Type: text/html; charset=utf-8 
Received header: Expires: Mon, 31 Aug 2009 09:38:45 GMT 
Received header: Server: Microsoft-IIS/7.0 
Received header: Date: Mon, 31 Aug 2009 09:38:45 GMT 
Received header: Content-Length: 118666 
Received header: 

、それは、その後、あなたがしたいヘッダーだけですfsockopenも同様に機能します。 GETの代わりにHEADを使うべきです。なぜなら、コンテンツではなくヘッダーだけを必要とするからです。

また、curlはhttps url-sのためにも(sslサポートでコンパイルしていれば)動作します。

関連する問題