2009-08-31 108 views
2

HEJ有重定向狀態,獲取HTTP響應頭/用PHP

我目前工作的一個基於PHP的工具來監控,而大量的網址和他們的重定向狀態。我花了相當多的時間尋找獲取HTTP響應頭的內容以提取當前重定向代碼和位置的最佳方式。這是目前如何完成的:

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

// Looping through the array to find the necessary fields 

這適用於我監控的網址中的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 2009-08-31 09:44:29

+0

對不起,那個沒有顯示在類似的問題列表中。不過,現在這裏有一個新的解決方案。 – 2009-08-31 10:22:58

回答

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,因爲您只需要標題,而不是內容。

另外,對於https url-s,curl也可以工作(只要你已經用ssl支持編譯它)。