【问题标题】:libcurl - Strange timeout after 5 secondslibcurl - 5 秒后奇怪的超时
【发布时间】:2023-03-25 16:18:01
【问题描述】:

我正在使用 libcurl 与 Twitter 和 Identi.ca 进行通信。只要我的连接不忙,一切都会完美运行。但是如果我正在下载一个大文件,curl 请求会在 5 秒后超时。

我在 curl 手柄上设置了以下选项:

curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 60);
curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, 15);

它们没有区别,curl_easy_perform() 总是在 5 秒后返回。 CURLINFO_RESPONSE_CODECURLINFO_HTTP_CONNECTCODE 的值始终为零。

有什么想法吗?我是否需要设置其他超时时间,或者是否有任何原因导致上述不生效?

编辑:curl_easy_perform 的返回值为CURLE_OPERATION_TIMEDOUT

【问题讨论】:

  • curl_easy_perform()的返回值是多少?
  • @Linus,我已经更新了主帖 :)
  • 文档中也有提到CURLOPT_NOSIGNAL,可能这个也需要设置吧?
  • @Uwe,谢谢,但我尝试过启用和禁用 CURLOPT_NOSIGNAL,同样的问题 :(

标签: c++ c curl timeout libcurl


【解决方案1】:

独立 curl 程序是否成功下载文件?如果没有,服务器端可能会有 5 秒的请求超时限制。

您应该仍然可以分块下载文件。首先抓取 HEAD 并拉取文件的大小,然后使用以下选项拉取文件的每个块:

curl_easy_setopt(curl, CURLOPT_BINARYTRANSFER, 1);
curl_easy_setopt(curl, CURLOPT_RANGE, start_range + "-" + (start_range + chunk_size));

一旦你有了所有的部分,将它们连接在一起,你应该有你的完整文件。

【讨论】:

    【解决方案2】:

    我会说这是因为以下两个原因之一:

    1. 您没有在这里向我们展示完整的程序,因此您在其他地方设置了超时选项,指示 libcurl 超时。

    2. 您的 libcurl 版本有一个错误,导致其行为不端。你没有说你在什么平台上使用哪个 libcurl 版本。

    要获得真正好的帮助,请提供一个完整源代码,该源代码会针对公共 URL 重复该问题。

    【讨论】:

      猜你喜欢
      • 2014-01-17
      • 2019-03-29
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 2017-01-15
      • 1970-01-01
      • 2018-02-21
      相关资源
      最近更新 更多