使用 curl 在 PHP 中获取 HTTP 代码

2022-08-30 06:16:36

我正在使用 CURL 来获取网站的状态,如果它是打开/关闭或重定向到另一个网站。我想让它尽可能简化,但它不能很好地工作。

<?php
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_TIMEOUT,10);
$output = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

return $httpcode;
?>

我把它包装在一个函数中。它工作正常,但性能不是最好的,因为它下载了整个页面,如果我删除它,它一直返回。$output = curl_exec($ch);0

有谁知道如何使性能更好?


答案 1

首先确保URL是否确实有效(字符串,不为空,语法良好),这可以快速检查服务器端。例如,首先执行此操作可以节省大量时间:

if(!$url || !is_string($url) || ! preg_match('/^http(s)?:\/\/[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(\/.*)?$/i', $url)){
    return false;
}

确保只获取标头,而不获取正文内容:

@curl_setopt($ch, CURLOPT_HEADER  , true);  // we want headers
@curl_setopt($ch, CURLOPT_NOBODY  , true);  // we don't need body

有关获取URL状态http代码的更多详细信息,请参阅我所做的另一篇文章(它也有助于以下重定向):


整体而言:

$url = 'http://www.example.com';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);    // we want headers
curl_setopt($ch, CURLOPT_NOBODY, true);    // we don't need body
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT,10);
$output = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

echo 'HTTP code: ' . $httpcode;

答案 2
// must set $url first....
$http = curl_init($url);
// do your curl thing here
$result = curl_exec($http);
$http_status = curl_getinfo($http, CURLINFO_HTTP_CODE);
curl_close($http);
echo $http_status;

推荐