我正在使用libcurl与Twitter和Identi.ca进行通信。只要我的连接不繁忙,一切都可以完美工作。但是,如果我正在下载一个大文件,curl会在5秒钟后请求超时。
我在卷曲手柄上设置了以下选项:
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_CODE
和CURLINFO_HTTP_CONNECTCODE
的值始终都为零。
有什么想法吗?我还需要设置其他超时吗?或者有什么原因导致上述超时无效?
EDIT:curl_easy_performer的返回值为CURLE_OPERATION_TIMEDOUT
我认为这是因为两个原因中的一个:
-
这里没有向我们展示完整的程序,所以在其他地方有一个设置超时选项,指示libcurl超时。
-
您的libcurl版本有一个错误,导致它行为不端。您没有说明您在哪个平台上使用哪个libcurl版本。
要获得真正好的帮助,请提供一个完整的源代码,该代码针对公共URL重复该问题。
独立的curl程序是否成功下载了该文件?如果没有,服务器端可能会有5秒的请求超时限制。
您应该仍然可以分块下载该文件。首先获取HEAD并提取文件的大小,然后使用以下选项提取文件的每个块:
curl_easy_setopt(curl, CURLOPT_BINARYTRANSFER, 1);
curl_easy_setopt(curl, CURLOPT_RANGE, start_range + "-" + (start_range + chunk_size));
一旦你有了所有的部分,将它们连接在一起,你就应该有了完整的文件。