我正在使用 libCURL向设备执行 HTTP GET 请求,该设备以多部分 HTTP 响应中的连续数据流进行响应。
我想处理不幸但可能发生的情况,即设备断开连接/关闭或无法再通过网络访问。
默认情况下,libCURL 没有我需要的几秒超时,所以我尝试了:
设置 CURLOPT_CONNECTTIMEOUT 选项,
但这只适用于连接阶段,而不是在已经接收数据的时候。设置 CURLOPT_TIMEOUT选项,
但这似乎总是强制超时,即使仍在接收数据也是如此。
我的问题是:在上述情况下,如何使用 libCURL 正确处理超时?
最佳答案
对于你的场景而不是
curl_easy_setopt(curl, CURLOPT_TIMEOUT, <your timeout in seconds>);
使用
curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 1);
curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, <your timeout in seconds>);
以上两行确保如果平均速度在 X 秒的时间范围内下降到每秒 1 个字节以下,则操作将中止(超时)。
参见 reference here .
关于c++ - 接收 HTTP 多部分流时 libCURL 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42529881/