php - 为什么从 url 获取时 curl 超时?
问题描述
为什么从网页获取 HTML 时 PHP 中的 cURL 会返回超时消息?
这是PHP代码。
function getFromUrl( $url )
{
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
if (curl_errno($curl))
{
echo 'Error:' . curl_error($curl) . '<br>' ;
}
curl_close($curl);
return $result ;
}
当我以 www.google.com 作为 URL 运行函数时,我得到了预期的结果。
$url = 'http://www.google.com' ;
$result = getFromUrl($url) ;
但是,当我在第二个网络服务器上传递网页的 URL 时,我得到一个超时响应。当我将它粘贴到浏览器中时,该 URL 存在。为什么超时消息?
$url = "http://xxx.54.20.170:10080/accounting/tester/hello.html" ;
echo $url . '<br>' ;
$rv = getFromUrl( $url ) ;
echo $rv . '<br>' ;
这是卷曲错误消息:
错误:无法连接到 xxx.54.20.170 端口 10080:连接超时
我希望将数据从一个 Web 服务器传输到另一个。
谢谢,
解决方案
对于 PHP,
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 400); //timeout in seconds
从终端首先检查 curl 是否正在使用以下额外选项工作。
--connect-timeout 允许连接到服务器的最长时间(以秒为单位)。这只会限制连接阶段,一旦 curl 连接,这个选项就不再有用了。从 7.32.0 开始,此选项接受十进制值,但实际超时的准确性会随着指定超时的十进制精度增加而降低。另请参见 -m, --max-time 选项。
If this option is used several times, the last one will be used.
和
-m, --max-time 允许整个操作花费的最长时间(以秒为单位)。这对于防止批处理作业由于网络速度慢或链接中断而挂起数小时很有用。从 7.32.0 开始,此选项接受十进制值,但实际超时的准确性会随着指定超时的十进制精度增加而降低。另请参见 --connect-timeout 选项。
If this option is used several times, the last one will be used.
尝试使用它们来增加超时时间。
curl 不起作用的原因有很多。其中一些可能是,1)响应时间很慢。2) 很少有站点检查少数标头参数来响应请求。这些参数包括 User-Agent、Referer 等,以确保它来自有效来源而不是通过机器人。
推荐阅读
- python - 如何将 match.group() 文本放入熊猫数据框中?
- boost - 使用内存清理程序与静态库链接时提升未定义符号问题
- angular - 将 Angular 应用程序更新到最新版本 10.0 后的 aws-amplify 警告
- cakephp - I have to contain two models with json field value in cakphp
- javascript - 创建具有乘法功能的片段
- c# - 如何使用互操作在excel中复制粘贴合并的单元格
- spring-boot - 使用rabbitmq消息时获取方法未找到异常
- mysql - MySQL 数据类型重新插入值
- c# - 类型或命名空间定义,或编译时预期的文件结尾问题
- javascript - Css:如何用边界线连接两个点