为什么我的代码返回http 0响应而不是预期的200?

时间:2018-12-29 13:05:02

标签: php

我有一个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);
}

谢谢您的帮助。

2 个答案:

答案 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进行响应。