我有一个php函数,用于检查URL列表是否仍然有效(检查HTTP状态代码),并且效果很好。当无法访问URL时,显示的状态码为“ 0”(例如:http://81.200.15.122/mjpg/video.mjpg)。但是在某些情况下,即使URL仍然有效,响应仍为“ 0”。
例如,此URL仍然有效,但是我的代码返回了“ 0” HTTP状态代码:http://81.149.56.38:8083/mjpg/video.mjpg
如果我使用在线HTTP检查器(https://www.portcheckers.com/http-header-check),它会确认状态码应为200。 我以为该问题可能与以下事实有关:它是mjpg视频流网址,但另一个类似的网址返回了预期的200状态代码:http://204.195.155.5/mjpg/video.mjpg
代码如下:
function get_response($url) {
$handles = curl_init($url);
curl_setopt($handles, CURLOPT_NOBODY, true);
curl_setopt($handles, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($handles, CURLOPT_TIMEOUT, 1);
curl_exec($handles);
$httpresponse = curl_getinfo($handles, CURLINFO_HTTP_CODE);
echo ("http status code: ". $httpresponse);
}
谢谢您的帮助。
答案 0 :(得分:0)
cURL在超时时返回0。某些URL的延迟可能比其他URL高。如果cURL超时,则由于查询不完整,它将返回0。
function get_response($url) {
$handles = curl_init($url);
curl_setopt($handles, CURLOPT_NOBODY, true);
curl_setopt($handles, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($handles, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($handles, CURLOPT_TIMEOUT, 30);
curl_exec($handles);
$httpresponse = curl_getinfo($handles, CURLINFO_HTTP_CODE);
echo ("http status code: ". $httpresponse);
}
更改值以优化代码。您应该在cron中运行此命令,并将结果保存在sql表中,以避免减慢页面速度。您还可以添加“最近扫描1小时”或类似的内容。用户将立即获得列表,服务器端将有大量时间查询每个网址。
答案 1 :(得分:0)
我终于发现了问题所在:我的托管服务器防火墙关闭了某些端口,不允许某些URL进行响应。