如何测试给定的网址是否为403错误?
define('HTTP_STATUS', 403);
echo var_dump(http_response_code("badURL.com"));
和
var_dump(http_response_code("bad_url.com"));
没有为我工作
答案 0 :(得分:2)
http_response_code
用于设置或检索发送回调用PHP脚本的客户端的响应状态,而不是向位于Internet上某处的其他服务发出请求。
您可以使用file_get_contents
向其他服务发出请求,然后使用$http_response_header
获取标头(包括HTTP响应代码)。
function get_response_code($url) {
@file_get_contents($url);
list($version, $status, $text) = explode(' ', $http_response_header[0], 3);
return $status;
}
var_dump(get_response_code('http://badurl.com'));
这也将支持file_get_contents
支持的所有形式的网址,包括HTTPS
(如果使用SSL支持进行编译)。
如果您想要执行'HEAD`请求,以避免必须下载任何内容(...但可能有自己的问题,可能不会返回相同的错误代码),您可以使用cURL或者带有file_get_contents的自定义HTTP谓词:
file_get_contents($url,
false,
stream_context_create(array(
'http' => array(
'method' => 'HEAD'
)
)
);
或者改为使用cURL:
$ch = curl_init($url);
// if you want to issue a HEAD request instead, uncomment the following
// updated from Havenard's comment - you might also want to set
// CURLOPT_SSL_VERIFYPEER to false if you don't want to verify SSL certificates.
// curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return status;
答案 1 :(得分:2)
您可以使用cURL:
$curl = curl_init('http://badurl.com/');
curl_setopt_array($curl, array(
CURLOPT_NOBODY => true, // use HEAD method, no body data
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false
));
curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
答案 2 :(得分:0)
尝试实际获得它:
$fp = fsockopen("badURL.com",80,$errno,$errstr,1); // 1 second timeout to prevent lag
if( !$fp) echo "Failed to connect! ".$errno." ".$errstr;
else {
fputs($fp,"HEAD / HTTP/1.0\r\nHost: badURL.com\r\n\r\n");
$line = fgets($fp); // get first line
fclose($fp); // not interested in the rest
list($version,$status,$statusText) = explode(" ",$line,3);
var_dump($status);
}