【问题标题】:Curl error: Operation timed out卷曲错误:操作超时
【发布时间】:2020-03-14 18:54:18
【问题描述】:

我在尝试使用 Curl 时遇到以下致命错误:

PHP Fatal error:  Uncaught HTTP_Request2_MessageException: 
Curl error: Operation timed out after 30000 milliseconds with 0 bytes received in      
/usr/share/php/HTTP/Request2/Adapter/Curl.php on line 200
Exception trace    Function       Location
0                  HTTP_Request2_Adapter_Curl::wrapCurlError('Resource id #12') 
                   /usr/share/php/HTTP/Request2/Adapter/Curl.php:200
1                  HTTP_Request2_Adapter_Curl->sendRequest(Object(HTTP_Request2))
/usr/share/php/HTTP/Request2.php:959< in /usr/share/php/HTTP/Request2/Adapter/Curl.php on line 172

但是,我不知道如何最好地调试它。没有引用我编写的任何代码行,只有 HTTP_Request2Curl 模块。尝试解决此问题的最佳方法是什么?

【问题讨论】:

  • 您是否尝试过在代码中实际执行 curl 命令的语句之前和之后进行调试?尝试以这种方式找到有问题的请求?从那里您可以使用 -v 开关尝试命令行,并尝试以这种方式获取更多信息。可能 URL 现在已经 404 了。

标签: php curl


【解决方案1】:

您的 curl 超时。可能您正在尝试的 url 需要超过 30 秒。

如果您通过浏览器运行脚本,则将set_time_limit 设置为零并持续无限秒。

set_time_limit(0);

使用此选项增加 curl 的操作时间限制CURLOPT_TIMEOUT

curl_setopt($ch, CURLOPT_TIMEOUT,500); // 500 seconds

服务器的无限重定向也可能发生这种情况。要停止此操作,请尝试在禁用跟随位置的情况下运行脚本。

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

【讨论】:

  • 这在 5 年后仍然帮助了我。谢谢!
  • 8 年了,答案依然有用!
【解决方案2】:

有时在 Joomla 中出现此错误是因为 SESSION 或 coockie 的某些内容不正确。 这可能是因为 HTTPd 服务器设置不正确,或者因为 CURL 或服务器 http 请求之前的某些设置

所以 PHP 代码如下:

  curl_setopt($ch, CURLOPT_URL, $url_page);
  curl_setopt($ch, CURLOPT_HEADER, 1);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
  curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
  curl_setopt($ch, CURLOPT_REFERER, $url_page);
  curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . "./cookie.txt");
  curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . "./cookie.txt");
  curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id());

  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  if( $sc != "" ) curl_setopt($ch, CURLOPT_COOKIE, $sc);

需要替换为 PHP 代码

  curl_setopt($ch, CURLOPT_URL, $url_page);
  curl_setopt($ch, CURLOPT_HEADER, 1);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
//curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
  curl_setopt($ch, CURLOPT_REFERER, $url_page);
  curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
//curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . "./cookie.txt");
//curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . "./cookie.txt");
//curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id());

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); // !!!!!!!!!!!!!
  //if( $sc != "" ) curl_setopt($ch, CURLOPT_COOKIE, $sc);

可能有人回复此选项如何与“Curl error: Operation timed out after ..”相关联

【讨论】:

    【解决方案3】:

    我经常遇到同样的问题。检查您的请求网址,如果您在 127.1.1/api192.168.... 等本地服务器上请求,请尝试更改它,确保您访问的是云端.

    【讨论】:

    • 太好了,除了在本地机器上创建虚拟主机之外的任何解决方案?
    【解决方案4】:
    $curl = curl_init();
    
      curl_setopt_array($curl, array(
      CURLOPT_URL => "", // Server Path
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 3000, // increase this
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_POSTFIELDS => "{\"email\":\"DarylBrowng@gmail.coh\",\"password\":\"markus William\",\"username\":\"Daryl Brown\",\"mobile\":\"013132131112\","msg":"No more SSRIs." }",
      CURLOPT_HTTPHEADER => array(
        "Content-Type: application/json",
        "Postman-Token: 4867c7a3-2b3d-4e9a-9791-ed6dedb046b1",
        "cache-control: no-cache"
      ),
    ));
    
    $response = curl_exec($curl);
    $err = curl_error($curl);
    
    curl_close($curl);
    
    if ($err) {
      echo "cURL Error #:" . $err;
    } else {
      echo $response;
    }
    

    根据响应所需的时间,使用以秒为单位的值初始化数组索引“CURLOPT_TIMEOUT”。

    【讨论】:

    【解决方案5】:

    在 curl 请求中添加超时 0,因此它的无限时间设置如 CURLOPT_TIMEOUT 设置为 0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 2016-10-21
      相关资源
      最近更新 更多