接收 HTTP 多部分流时 libCURL 超时
libCURL timeout while receiving HTTP multi-part flow
我正在使用 libCURL 向设备执行 HTTP GET 请求,该设备以多部分 HTTP 响应中的连续数据流进行响应。
我想处理设备 disconnected/shutdown 或无法再通过网络访问的不幸但可能的情况。
默认情况下,libCURL 没有我需要的几秒超时,所以我尝试了:
设置 CURLOPT_CONNECTTIMEOUT 选项,
但这只适用于连接阶段,而不是在已经接收数据时。
设置 CURLOPT_TIMEOUT 选项,
但这似乎总是 force 超时,即使仍在接收数据也是如此。
我的问题是:在上述情况下,如何使用 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 个字节,则操作中止(超时)。
我正在使用 libCURL 向设备执行 HTTP GET 请求,该设备以多部分 HTTP 响应中的连续数据流进行响应。
我想处理设备 disconnected/shutdown 或无法再通过网络访问的不幸但可能的情况。
默认情况下,libCURL 没有我需要的几秒超时,所以我尝试了:
设置 CURLOPT_CONNECTTIMEOUT 选项,
但这只适用于连接阶段,而不是在已经接收数据时。设置 CURLOPT_TIMEOUT 选项,
但这似乎总是 force 超时,即使仍在接收数据也是如此。
我的问题是:在上述情况下,如何使用 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 个字节,则操作中止(超时)。