0

我正在尝试获取 HTTP 标头,但只是服务器软件示例:Apache、Microsoft-iis、Nginx 等

功能

get_headers($url,1); 

如果可能或其他方式,我想设置超时太慢了??

谢谢

4

4 回答 4

1

对于本地服务器,$_SERVER变量将为您提供 Web 服务器在 SERVER_* 键中公开的所有内容。

对于远程服务器,您可以使用 libcurl 并仅请求标头。然后解析响应。根据网络连接和另一台服务器的速度,延迟仍然可能很长。为避免长时间延迟,例如对于离线服务器,请使用 .将 curl 选项设置为短超时(例如 5 秒)curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5)

于 2012-07-20T15:17:33.263 回答
1

这会将代码设置为 2 秒后超时,如果需要毫秒,可以使用 CURLOPT_TIMEOUT_MS。

$timeoutSecs = 2;

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, true); // Return the header
curl_setopt($ch, CURLOPT_NOBODY, true); // Don't return the body
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Return to a variable instead of echoing
curl_setopt($ch, CURLOPT_TIMEOUT, $timeoutSecs);

$header = curl_exec($ch);
curl_close($ch);

编辑:请注意,您不仅可以从中获取单个标头,它将返回整个标头(老实说,这不会比仅获取一个段慢),因此您需要创建一个模式来拉“服务器:”标题。

于 2012-07-20T15:42:37.313 回答
0

您可以使用 cURL 执行此操作,这将允许您从远程服务器获取响应。您也可以使用 cURL 设置超时。

于 2012-07-20T15:19:23.997 回答
0

通过 curl 或 fsockopen 获取标题,解析它你想要的。

fsockopen 的函数是超时的最后一个参数。

curl 的函数调用“curl_setopt($curl, CURLOPT_TIMEOUT, 5)”来表示超时。

例如:

function getHttpHead($url) {
$url = parse_url($url);
if($fp = @fsockopen($url['host'],empty($url['port']) ? 80 : $url['port'],$error,
    $errstr,2)) {
    fputs($fp,"GET " . (empty($url['path']) ? '/' : $url['path']) . " HTTP/1.1\r\n");
    fputs($fp,"Host:$url[host]\r\n\r\n");
    $ret = '';
    while (!feof($fp)) {
        $tmp = fgets($fp);
        if(trim($tmp) == '') {
            break;
        }
        $ret .= $tmp;
    }
    preg_match('/[\r\n]Server\:\s([a-zA-Z]*)/is',$ret,$match);
    return $match[1];
    //return $ret;
} else {
    return null;
}
}
$servername= getHttpHead('http://google.com');

echo $servername;
于 2012-07-20T16:04:08.123 回答