我正在使用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_CODE
和CURLINFO_HTTP_CONNECTCODE
值始终为零。
有什么想法吗?我需要设置其他任何超时,还是有任何原因导致上述内容无法生效?
编辑:curl_easy_perform的返回值为CURLE_OPERATION_TIMEDOUT
答案 0 :(得分:1)
我想这是因为有两个原因:
你没有在这里向我们展示完整的程序,所以你在其他地方有一个设置超时选项,指示libcurl超时。
你的libcurl版本有一个错误,它会导致行为异常。您没有说明您正在使用哪个平台上的libcurl版本。
要获得真正好的帮助,请提供完整的源代码,以便针对公共网址重复此问题。
答案 1 :(得分:0)
独立卷曲程序是否成功下载了该文件?如果不是,则服务器端可能存在5秒请求超时限制。
您仍然可以以块的形式下载文件。首先抓住HEAD并拉出文件的大小,然后使用以下选项拉出文件的每个块:
curl_easy_setopt(curl, CURLOPT_BINARYTRANSFER, 1);
curl_easy_setopt(curl, CURLOPT_RANGE, start_range + "-" + (start_range + chunk_size));
一旦掌握了所有部分,将它们连接在一起就可以获得完整的文件。