我们已获得定期从其他网站复制网络摄像头图像的权限。我们在代码中的其他位置使用cURL函数,但在尝试访问此图像时,我们无法执行此操作。
我不确定发生了什么。我们用于许多其他cURL函数的代码如下:
$image = 'http://island-alpaca.selfip.com:10202/SnapShotJPEG?Resolution=640x480&Quality=Standard'
$options = array(
CURLOPT_URL => $image,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT => 120,
CURLOPT_MAXREDIRS => 10
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$cURL_source = curl_exec($ch);
curl_close($ch);
此代码不适用于以下网址(网络摄像头图片),该网址可在我们所在位置的浏览器中访问:http://island-alpaca.selfip.com:10202/SnapShotJPEG?Resolution=640x480&Quality=Standard
当我运行测试cURL时,它似乎暂停了超时的长度。 $cURL_source
永远不会有任何数据。
我在网上尝试过其他一些cURL示例,但无济于事。我假设有一种方法来构建cURL请求以使其工作,但我尝试过的任何东西似乎都无法让我到处。
非常感谢任何帮助。
由于
答案 0 :(得分:3)
我发现您的代码没有任何问题。由于网络问题不同,有时会出错。您可以尝试在循环中等待良好的响应,以增加成功的机会。
类似的东西:
$image = 'http://island-alpaca.selfip.com:10202/SnapShotJPEG?Resolution=640x480&Quality=Standard';
$tries = 3; // max tries to get good response
$retry_after = 5; // seconds to wait before new try
while($tries > 0) {
$options = array(
CURLOPT_URL => $image,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 10,
CURLOPT_MAXREDIRS => 10
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$cURL_source = curl_exec($ch);
curl_close($ch);
if($cURL_source !== false) {
break;
}
else {
$tries--;
sleep($retry_after);
}
}
答案 1 :(得分:1)
如前所述,我可以看到代码有任何问题。但是,也许您应该考虑为卷曲设置更多超时 - 以确保最终加载这个缓慢加载的图片。所以,作为一种可能性,尝试将CURLOPT_TIMEOUT增加到奇怪的大数,以及php脚本执行的相应超时。它可能有所帮助。 也许,最好的变体是混合前一作者的变体和这一个。
答案 2 :(得分:1)
我在图片网址上尝试了wget并下载了图片然后似乎挂了 - 也许服务器没有正确关闭连接。
然而,我得到了file_get_contents而不是curl,如果这有帮助:
<?php
$image = 'http://island-alpaca.selfip.com:10202/SnapShotJPEG?Resolution=640x480&Quality=Standard';
$imageData = base64_encode(file_get_contents($image));
$src = 'data: '.mime_content_type($image).';base64,'.$imageData;
echo '<img src="',$src,'">';
答案 3 :(得分:1)
你确定它不起作用吗?您的代码对我来说很好(在$image = ...
之后添加缺少的分号后)。
它可能给你带来麻烦的原因是因为它实际上并不是一个图像,它是一个MJPEG。它使用一个保持打开且具有多部分内容的HTTP会话(类似于您在MIME电子邮件中看到的内容),并且服务器推送一个新的JPEG帧以替换间隔中的最后一个。尽管如此,CURL似乎很高兴为您提供第一帧。
答案 4 :(得分:1)
您可以从运行此代码的服务器获取URL吗?也许它有防火墙规则?您是从非标准端口获取的:10202。您的防火墙必须允许它。
我和其他人一样,发现使用curl / php获取图像很容易。