curl_easy_getinfo 函数用于在 libcurl 的易用层面获取会话的各种运行时信息。如果你想在 CURLOPT_WRITEFUNCTION 对应的回调函数中调用 curl_easy_getinfo,通常是为了获取传输的数据大小、HTTP 状态码等信息。
这里有一个简单的例子,展示如何在 CURLOPT_WRITEFUNCTION 回调中使用 curl_easy_getinfo 来获取已传输的字节数:
#include <curl/curl.h>
#include <stdio.h>
size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) {
curl_off_t bytes_transferred = 0;
CURL *easy_handle = (CURL *)userp;
// 获取已传输的字节数
curl_easy_getinfo(easy_handle, CURLINFO_BYTES_SENT, &bytes_transferred);
printf("Bytes sent: %lld\n", bytes_transferred);
// 实际的数据写入操作(这里只是为了示例,通常你会在这里写入数据)
// (contents, size * nmemb)
return size * nmemb;
}
int main(void) {
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)curl);
res = curl_easy_perform(curl);
// 其他的错误检查或资源清理...
curl_easy_cleanup(curl);
}
return 0;
}
在这个例子中,WriteCallback 函数作为 CURLOPT_WRITEFUNCTION 的回调,当有数据到达时被调用。在回调函数内部,我们通过 curl_easy_getinfo 获取了 CURLINFO_BYTES_SENT 信息,即已传输的字节数,并打印出来。注意,我们将 CURL * 句柄作为 userp 传递给回调函数,并在 curl_easy_getinfo 中用作第一个参数。