声明

  1. int progress_callback(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow);
  2. CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XFERINFOFUNCTION, progress_callback);

概要

进度计量的回调函数。

详情

传入一个指向你的回调函数的指针,该函数应该符合上面显示的原型。

libcurl会以频繁的间隔来调用该函数,而不是调用它内部的进度计量函数。当数据正在传输的时候它会被调用地很频繁,而在慢速阶段,例如没有东西在传输的时候,它的调用频率会下降到大约每秒一次。

clientp是通过CURLOPT_XFERINFODATA设置的指针,它不会被libcurl使用,而仅仅是从应用程序传递给回调。

该回调会被告知有多少数据libcurl将会传输以及已经传输,以字节为单位。dltotal是libcurl期望在这个传输中下载的总字节数。dlnow是至今已经下载的总字节数。ultotal是libcurl期望在这个传输中上传的总字节数。ulnow是至今已经上传的总字节数。

未知或者不使用的参数值会设置成0来传递给回调(例如当你只下载数据时,上传大小总是为0)。很多时候,在libcurl知道数据大小之前,这个回调首先会被调用一次或多次,因此程序必须能够处理这种情况。

从这个回调返回一个非0值会导致libcurl终止传输,并返回CURLE_ABORTED_BY_CALLBACK

如果你使用multi接口来传输数据,这个函数不会在空闲阶段被调用,除非你调用了恰当的会进行传输的libcurl函数。

为了让这个函数能够被真正调用,CURLOPT_NOPROGRESS必须设置成0。

默认值

默认情况下,libcurl有一个内部的进度计量。这很少是用户想要的。

适用协议

所有协议。

可用性

在7.32.0加入。这个回调替换CURLOPT_PROGRESSFUNCTION

返回值

返回CURLE_OK