【问题标题】:cURL time out issuescURL 超时问题
【发布时间】:2013-01-25 11:25:48
【问题描述】:

我正在使用 libcurl 将一些文件从客户端下载到服务器。我在 curl 连接中设置了以下选项,

curl_easy_setopt(curlPtr, CURLOPT_LOW_SPEED_LIMIT, 1);
curl_easy_setopt(curlPtr, CURLOPT_LOW_SPEED_TIME, 360);
curl_easy_setopt(curlPtr, CURLOPT_IGNORE_CONTENT_LENGTH, 1);
curl_easy_setopt(curlPtr, CURLOPT_TCP_NODELAY, 1);

即使我已设置在 6 分钟(360 秒)内未收到任何字节时超时,但即使我收到响应,操作也会超时,

这是我从这里收到的 cURL 调试响应,

  • 操作在 360000 毫秒后超时,收到 205512 个字节
  • 关闭连接 #0
  • 已超时

我已将响应重定向到一个文件,并且可以确认响应字节。但是在恰好达到 6 分钟后,操作仍然会超时。

任何人都可以帮助我上面有什么我错了吗?

注意我使用的是 libcurl 7.19.3。我无法立即升级,但我们计划升级到最新的稳定版本。

谢谢, 普拉布

【问题讨论】:

  • 服务器可能会让你超时并关闭连接(在客户端你几乎无法阻止它)。如果没有数据流下,服务器保持连接打开将是一个安全漏洞(攻击者可以发起 DOS 攻击并最终使用所有可用连接打开与服务器的许多连接)。
  • 你有没有收到任何 HTTP 代码>
  • PS:传递给 curl_easy_setopt 的大多数(整数)值应该是长整数。您正在传递整数。这可能是未来的一个问题。使用curl_easy_setopt(curlPtr, CURLOPT_LOW_SPEED_TIME, 360L);
  • 请在下面找到我的帖子并告诉我有什么问题

标签: c++ curl libcurl


【解决方案1】:

您发布的只有 4 行显示没有错误。

默认情况下,CURLOPT_TIMEOUT 和 CURLOPT_TIMEOUT_MS 的值为 0。 但如果您使用特定的 curl 实现,请尝试在您的代码中将这些选项传递给 0。

如果它没有改变任何东西,那是因为它在 Web 服务器上超时。所以如果你没有这台服务器的控制权,你什么也做不了。您必须制作一个带有循环的程序才能重新启动连接。

【讨论】:

    猜你喜欢
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2011-06-19
    • 1970-01-01
    • 2011-04-03
    • 2011-12-28
    • 2013-07-12
    相关资源
    最近更新 更多