我需要一個PHP腳本來讀取每個URL請求的HTTP響應代碼。PHP get_headers()替代方案
像
$headers = get_headers($theURL);
return substr($headers[0], 9, 3);
的問題是get_headers()函數在服務器級被禁止,作爲policy.So這是行不通的。
問題是如何獲取URL的HTTP響應代碼?
我需要一個PHP腳本來讀取每個URL請求的HTTP響應代碼。PHP get_headers()替代方案
像
$headers = get_headers($theURL);
return substr($headers[0], 9, 3);
的問題是get_headers()函數在服務器級被禁止,作爲policy.So這是行不通的。
問題是如何獲取URL的HTTP響應代碼?
如果捲曲啓用,您可以使用它來獲取整個頭部或只是響應代碼。下面的代碼響應代碼分配給$response_code
變量:如果你能
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_HEADER => true,
CURLOPT_NOBODY => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => 'http://stackoverflow.com'));
$headers = explode("\n", curl_exec($curl));
curl_close($curl);
您可以使用fsockopen和常規文件操作來構建和讀取自己的HTTP查詢。看看我剛纔的答覆關於這一主題:
+1,但如果他有捲曲可用的可能更容易編寫和維護比滾動自己。 – 2011-05-22 10:12:06
使用的HttpRequest:http://de2.php.net/manual/en/class.httprequest.php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => 'http://stackoverflow.com'));
curl_exec($curl);
$response_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
爲了讓整個頭,你可以發出一個HEAD請求,這樣
$request = new HttpRequest("http://www.example.com/");
$request->send();
echo $request->getResponseCode();
或者做硬盤的方式:http://de2.php.net/manual/en/function.fsockopen.php
$errno = 0;
$errstr = "";
$res = fsockopen('www.example.com', 80, $errno, $errstr);
$request = "GET/HTTP/1.1\r\n";
$request .= "Host: www.example.com\r\n";
$request .= "Connection: Close\r\n\r\n";
fwrite($res, $request);
$head = "";
while(!feof($res)) {
$head .= fgets($res);
}
$firstLine = reset(explode("\n", $head));
$matches = array();
preg_match("/[0-9]{3}/", $firstLine, $matches);
var_dump($matches[0]);
捲曲可能也是一個不錯的選擇,但最好的選擇是打敗你的管理員;)
謝謝大家!啓用CURL做到了這一點! – 2011-05-22 11:21:13
@Matej是的,它運行良好,但是有一個簡單的說明,我認爲我們不會像「Apache或iis等等」那樣獲得他們使用的「服務器」等一些細節。但要檢查服務器響應代碼,它工作正常。 – VKGS 2011-10-06 06:26:17
@Sekar:「服務器」是可選的,它依賴於服務器是否發送。 – 2011-10-06 19:19:20