【发布时间】:2019-01-06 02:00:09
【问题描述】:
我有一个 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 视频流 URL 的事实有关,但是这个其他类似的 URL 返回了预期的 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);
}
感谢您的帮助。
【问题讨论】:
-
在我看来这可能是超时问题。 curl 有两个选项:
CURLOPT_CONNECTTIMEOUT- 尝试连接时等待的秒数。使用 0 无限期等待。CURLOPT_TIMEOUT- 允许 cURL 函数执行的最大秒数。 -
我同意@PatrickSimard。我已经测试了您的代码和类似
$ curl -Is http://81.149.56.38:8083/mjpg/video.mjpg | head -n 1的命令,最终都返回 200 或 0。根据您的需要,尝试增加超时,忽略一些 0 结果或修复超时 -
由于增加超时不能解决我的问题,我还尝试使用以下方法检查 URL 是否返回一些内容:
<?php $section = file_get_contents('http://81.149.56.38:8083/mjpg/video.mjpg', FALSE, NULL, 20, 14); var_dump($section); ?>但它也返回没有内容......
标签: php