首页 > 解决方案 > 为什么从 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 服务器传输到另一个。

谢谢,

标签: phpcurl

解决方案


对于 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 等,以确保它来自有效来源而不是通过机器人。


推荐阅读