名称 curl_easy_getinfo
原型
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );
描述
使用这个函数从curl会话请求内部信息。第三个参数必须是一个long变量,一个指向char *的指针,一个指向struct curl_slist *指针或者一个指向double的指针(就像本文档下面将要描述的那样)。当这个函数返回CURL_OK时,这个被指向的数据会被相应的填充。
不用对这个函数返回的内存进行释放(free),除非在下面被特殊的强调。
有效的INFO
下面的信息可以被截取(有很多,可以去英文网站去看,有对应的示例代码):
CURLINFO_HTTP_VERSION 获取在连接时候使用的http版本。
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
long http_version;
curl_easy_getinfo(curl, CURLINFO_HTTP_VERSION, &http_version);
}
curl_easy_cleanup(curl);
}
CURLINFO_TOTAL_TIME 获取前一个传输的执行总时间
curl = curl_easy_init();
if(curl) {
double total;
curl_easy_setopt(curl, CURLOPT_URL, url);
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &total);
if(CURLE_OK == res) {
printf("Time: %.1f", total);
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
CURLINFO_CONNECT_TIME 获取connet从开始到完成的时间
curl = curl_easy_init();
if(curl) {
double connect;
curl_easy_setopt(curl, CURLOPT_URL, url);
res = curl_easy_perform(curl);
if(CURLE_OK == res) {
res = curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME, &connect);
if(CURLE_OK == res) {
printf("Time: %.1f", connect);
}
}
/* always cleanup */
curl_easy_cleanup(curl);
}
CURLINFO_SPEED_UPLOAD_T 获取上传速度,单位bytes/second
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
/* Perform the request */
res = curl_easy_perform(curl);
if(!res) {
curl_off_t speed;
res = curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD_T, &speed);
if(!res) {
printf("Upload speed %" CURL_FORMAT_CURL_OFF_T " bytes/sec\n", speed);
}
}
}
关于时间
可以从curl_easy_getinfo()获取下面看到的6个时间值
curl_easy_perform()
|
|--NAMELOOKUP
|--|--CONNECT
|--|--|--APPCONNECT
|--|--|--|--PRETRANSFER
|--|--|--|--|--STARTTRANSFER
|--|--|--|--|--|--TOTAL
|--|--|--|--|--|--REDIRECT
返回值
如果操作成功,返回CURLE_OK