http头-PHP get_headers()替代方案



我需要一个PHP脚本来读取每个URL请求的HTTP响应代码。

类似的东西

$headers = get_headers($theURL);
return substr($headers[0], 9, 3);

问题是get_headers()函数作为一项策略在服务器级别被禁用。所以它不起作用。

问题是如何获得URL的HTTP响应代码?

如果启用了cURL,您可以使用它来获取整个标头或仅获取响应代码。以下代码将响应代码分配给$response_code变量:

$curl = curl_init();
curl_setopt_array( $curl, array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_URL => 'http://stackoverflow.com' ) );
curl_exec( $curl );
$response_code = curl_getinfo( $curl, CURLINFO_HTTP_CODE );
curl_close( $curl );

要获得整个标头,您可以发出HEAD请求,如下所示:

$curl = curl_init();
curl_setopt_array( $curl, array(
    CURLOPT_HEADER => true,
    CURLOPT_NOBODY => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_URL => 'http://stackoverflow.com' ) );
$headers = explode( "n", curl_exec( $curl ) );
curl_close( $curl );

如果可以,请使用HttpRequest:http://de2.php.net/manual/en/class.httprequest.php

$request = new HttpRequest("http://www.example.com/");
$request->send();
echo $request->getResponseCode();

或者采取艰难的方式:http://de2.php.net/manual/en/function.fsockopen.php

$errno = 0;
$errstr = "";
$res = fsockopen('www.example.com', 80, $errno, $errstr);
$request = "GET / HTTP/1.1rn";
$request .= "Host: www.example.comrn";
$request .= "Connection: Closernrn";
fwrite($res, $request);
$head = "";
while(!feof($res)) {
    $head .= fgets($res);
}
$firstLine = reset(explode("n", $head));
$matches = array();
preg_match("/[0-9]{3}/", $firstLine, $matches);
var_dump($matches[0]);

卷曲可能也是一个不错的选择,但最好的选择是击败你的管理员;)

您可以使用fsockopen和常规文件操作构建和读取自己的HTTP查询。看看我之前对这个话题的回答:

除了CURL,其他客户还有其他选择吗?

相关内容

  • 没有找到相关文章

最新更新