【问题标题】:Curl not timing out properly卷曲没有正确超时
【发布时间】:2013-10-12 11:44:17
【问题描述】:

我设置了 CURLOPT_CONNECTTIMEOUT_MS = 200 和 CURLOPT_TIMEOUT_MS = 70 毫秒。但我看到 CURLINFO_TOTAL_TIME 大约是 220 毫秒。

根据 libcurl 文档,CURLOPT_TIMEOUT_MS 还包括连接超时。所以基本上我的 curl 调用总时间不应该超过 70 毫秒。但是为什么要拿回更多的控制权呢?

谁能解释一下这种行为。

我正在使用 curl 7.19_02 C++ 库。

这是我的代码

CURL * curl;
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl,CURLOPT_CONNECTTIMEOUT_MS,200);
curl_easy_setopt(curl,CURLOPT_TIMEOUT_MS,70);
curl_easy_setopt(curl, CURLOPT_HEADER, 0);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); 

double tt = 0.0;
double ns = 0.0;
double ct = 0.0;
double pt = 0.0;
double st = 0.0;

curl_easy_perform(curl);

int curlRC = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &tt);
curlRC = curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME, &ns);
curlRC = curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME, &ct);
curlRC = curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, &pt);
curlRC = curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME, &st);

cout << "Curl timing info: Total: " << tt << endl << " Lookup: "<< ns << endl << "    Connect: " << ct << "\n" << "pre transfer: " << pt << endl << "start transfer: " << st <<endl;

我得到的时间信息如下。请检查一下

卷曲时间信息:总计:0.216793

查找:0.000999

连接:0.023199

预转账:0.023213

开始传输:0.216667

所以重点是,预传输和开始传输之间发生了什么?

【问题讨论】:

  • DNS解析大概
  • 您使用的是哪个 cURL 版本?
  • 你们谁能解释一下,可能的原因是什么。如果可以通过除以 HTTP 请求所花费的时间来解释,那就太好了。
  • 来自 libcurl 文档:“如果构建 libcurl 以使用标准系统名称解析器,则传输的该部分仍将使用整秒分辨率来处理超时,允许的最小超时为一秒。”也许这就是原因。
  • 我检查过了,这不是原因。如果“它是使用标准系统名称解析器构建的”,那么如果以毫秒为单位,它将立即超时。但这里的行为不同。

标签: c++ http curl


【解决方案1】:

这是直到版本 7.20.0 的 libcurl 中的一个错误。 使用 7.20.1 的输出与预期的一样:

Curl timing info: Total: 0.071098
Lookup: 0.000116
Connect: 0.000303
pre transfer: 0.000327
start transfer: 0

我找不到修复错误的变更集。但可能会在cURL Changes中进行“亚秒级超时改进”

【讨论】:

    【解决方案2】:

    所以重点是,预传输和开始传输之间发生了什么?

    这是服务器计算您的结果(处理您的请求)并准备好发送响应的第一个字节的实际时间。简而言之,这是请求的实际服务器时间,您会认为这是最大的一块

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 2012-11-15
      • 2011-08-23
      • 1970-01-01
      • 2017-06-04
      • 2011-09-16
      相关资源
      最近更新 更多