HTTP 响应代码 0 - 网站正在运行

HTTP Response Code 0 - Site is working

我正在制作一个网站,用于检查网站是否正常运行。我传入了我想检查的网站的 URL,下面的代码将检查该网站是否有效,return HTTP 响应代码以及 true 或 false。

function urlExists($url=NULL)
{
    if($url == NULL) return false;
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($httpcode == 0) {
        return array (false, $httpcode);
    }
    else if($httpcode < 400){
        return array (true, $httpcode);
    } else {
        return array (false, $httpcode);
    }
}

对于我正在测试的网站之一,尽管我知道该网站是实时和工作的,但我得到的 HTTP 响应代码是 0。

该站点是一个大型站点,服务器不是很强大,因此速度非常慢,因此响应时间可能在 7 到 25 秒之间变化。

如有任何帮助,我们将不胜感激。

谢谢,

山姆

代码 0 returns 通常在使用无效 URL 语法或找不到主机错误时出现。

您也可以调用 curl_error($ch) 函数 (http://php.net/manual/en/function.curl-error.php) 来确定错误详情。

基于这两个链接:-

https://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html

https://curl.haxx.se/libcurl/c/CURLOPT_CONNECTTIMEOUT.html

第一个是:- set maximum time the request is allowed to take

第二个是:- timeout for the connect phase

正如您所说,您所击中的 Site URL 需要 7-25 秒的响应时间。同时,由于这两个时间设置,您的 CURL request 被终止和关闭。

在你的代码中增加这两个时间设置,它会为你工作。

谢谢。

我将提供 2 个备选方案供您比较 - 连同您的 curl() 函数,您将有 3 个选项来查看哪个 better/faster 适合您。

选项 A(所有 php 版本),需要激活 fopen():

if (!$fp = fopen($url, 'r')) 
{
    trigger_error("Unable to open URL ($url)", E_USER_ERROR);

}
$headers = stream_get_meta_data($fp);
fclose($fp);    
$http_header_info = $headers['wrapper_data'][0];
$httpCode = (int)substr($http_header_info, 9, 3);   


选项 B (php5+):

$headers = get_headers($url, 1);
$http_header_info = $headers[0];
$httpCode = substr($http_header_info, 9, 3);

此外,如果有人对这 3 种方法进行了基准测试,我很想知道哪种方法更合适(当然只用于检索 http 响应 headers)