我想知道如何使用C ++中的curl库实时查看正在上传的文件的速度。这就是我写的:
curl_easy_getinfo(curl,CURLINFO_SPEED_UPLOAD,&c);
但手册说它显示平均速度,但即使这似乎也不适合我,因为我只能看到0。
还有一件事:如何设置有效的上传限制,因为如果我写这个:
curl_easy_setopt(curl, CURLOPT_MAX_SEND_SPEED_LARGE, 100);
我收到错误502消息。
答案 0 :(得分:3)
来自curl_easy_getinfo
文档:
CURLINFO_SPEED_UPLOAD
将指针传递给double,以获得针对 完整 [强调添加]上传测量的卷曲平均上传速度。以字节/秒为单位测量。
CURLINFO_SPEED_UPLOAD
仅在updload完成后才起作用。而是编写进度回调并设置CURLOPT_PROGRESSFUNCTION
。让您的进度函数计算当前速度的exponential moving average。
progress(curl, fd, len):
now = time()
speed = len/(now-then) * weight + speed * (1-weight)
update progress display
then=now
与往常一样,网络速度是近似值。
答案 1 :(得分:0)
我还建议您传递long而不是int。 (它们的大小并不总是一样,curl_easy_setopt需要很长的时间。
curl_easy_setopt(curl, CURLOPT_MAX_SEND_SPEED_LARGE, 100L)
答案 2 :(得分:0)
根据curl_easy_setopt文档,您需要传递 curl_off_t 作为CURLOPT_MAX_SEND_SPEED_LARGE的参数,这是 long long 。 (这可能是新的,因为给出了其他答案。)
CURLOPT_MAX_SEND_SPEED_LARGE
传递curl_off_t作为参数。如果上传速度超过此速度 (在每秒字节数中计算)累积平均值 转移,转移将暂停以保持平均费率低于 或等于参数值。默认为无限速度。
此选项不会影响使用FILE:// URL完成的传输速度。 (在7.15.5中添加)
示例:
curl_easy_setopt( curl, CURLOPT_MAX_SEND_SPEED_LARGE, 1024LL );