什么是HTTP状态码
HTTP状态码是指由Web服务器给出的HTTP响应的状态码。判断HTTP返回的状态码来帮助理解一个请求过程中的结果,进而调试和修复请求问题。常见的状态码有200代表成功返回页面,404代表无法找到该页面等。
那么如何使用PHP获取页面的HTTP状态码呢?下面介绍两种方法。
使用cURL库获取HTTP状态码
cURL是一个广泛使用的互联网客户端,支持多个传输协议。我们可以使用cURL库的curl_getinfo函数获取HTTP头信息中的状态码。
$url = ‘https://www.example.com’;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
首先建立一个对目标网站的curl请求。然后我们执行curl并通过curl_getinfo获取HTTP状态码(区分大小写)。最后关闭curl请求。
需要注意的是curl_exec函数的返回结果可能是文本、json,而不是HTML。在检测401、403和404等状态码时,这可能是个问题。必须通过其他方法处理结果才能具备通用性。
使用PHP函数获取HTTP状态码
PHP包含函数 get_headers,它可以从一个远程的文档中读取 HTTP header。
$url = "http://www.example.com";
$headers = @get_headers($url);
//当远程无法连接时返回 false,若成功则 $headers 包含所有响应头信息数组
if($headers){
$result = substr($headers[0], 9, 3);
}
通过调用函数 get_headers来读取HTTP响应头信息,可以访问返回的响应头信息数组,然后使用substr从中提取状态码。
这两种方法都可以获取HTTP状态码,为了通用性,我们可以封装成一个函数。
function get_httpcode($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $httpcode;
}
$url = "http://www.example.com";
echo get_httpcode($url);
将cURL提供的请求、检索HTTP状态码和关闭请求的方法封装成单个可重用的函数。我们可以将URL作为函数参数传递,以使它更具有灵活性。