卷曲连接选项

时间:2010-04-10 20:58:03

标签: c++ curl

我想知道如何使用C ++中的curl库实时查看正在上传的文件的速度。这就是我写的:

curl_easy_getinfo(curl,CURLINFO_SPEED_UPLOAD,&c);

但手册说它显示平均速度,但即使这似乎也不适合我,因为我只能看到0。

还有一件事:如何设置有效的上传限制,因为如果我写这个:

curl_easy_setopt(curl, CURLOPT_MAX_SEND_SPEED_LARGE, 100);

我收到错误502消息。

3 个答案:

答案 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 );