PHP如何测试给定的URL是否返回403错误

时间:2014-07-18 22:06:25

标签: php

如何测试给定的网址是否为403错误?

define('HTTP_STATUS', 403);
echo var_dump(http_response_code("badURL.com"));

 var_dump(http_response_code("bad_url.com"));

没有为我工作

3 个答案:

答案 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)

Not like that, certainly.

尝试实际获得它:

$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);
}