执行结果
代码
// getinfo.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; #include "curl/curl.h" #pragma comment(lib, "curllib.lib") //回调函数 size_t process_data(void *buffer, size_t size, size_t nmemb, void *user_p) { FILE *fp = (FILE *)user_p; size_t return_size = fwrite(buffer, size, nmemb, fp); //cout << (char *)buffer << endl; return return_size; } void print_cookies(CURL *curl) { CURLcode res; struct curl_slist *cookies; struct curl_slist *nc; int i; printf("Cookies, curl knows:\n"); res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies); if (res != CURLE_OK) { fprintf(stderr, "Curl curl_easy_getinfo failed: %s\n", curl_easy_strerror(res)); exit(1); } nc = cookies, i = 1; while (nc) { printf("[%d]: %s\n", i, nc->data); nc = nc->next; i++; } if (i == 1) { printf("(none)\n"); } curl_slist_free_all(cookies); } int _tmain(int argc, _TCHAR* argv[]) { // 初始化libcurl CURLcode return_code; return_code = curl_global_init(CURL_GLOBAL_WIN32); if (CURLE_OK != return_code) { cerr << "init libcurl failed." << endl; return -1; } // 获取easy handle CURL *easy_handle = curl_easy_init(); if (NULL == easy_handle) { cerr << "get a easy handle failed." << endl; curl_global_cleanup(); return -1; } FILE *fp = fopen("data.html", "ab+"); char *url = "http://blog.csdn.com/php_fly"; //char *url = "http://www.csdn.com"; // 设置easy handle属性 curl_easy_setopt(easy_handle, CURLOPT_URL, url); curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, &process_data); // curl_easy_setopt(easy_handle, CURLOPT_VERBOSE, 1L); //curl_easy_setopt(easy_handle, CURLOPT_COOKIEFILE, ""); /* just to start the cookie engine */ //fp:回调函数的参数 curl_easy_setopt(easy_handle, CURLOPT_WRITEDATA, fp); // 执行数据请求 return_code = curl_easy_perform(easy_handle); if (return_code != CURLE_OK) { printf( "Failed to get '%s' [%s]\n",url, return_code); return 0; } ////////////////////////////////////////////////////////////////////////// int totalTime = 0; return_code = curl_easy_getinfo(easy_handle,CURLINFO_TOTAL_TIME,&totalTime); if((CURLE_OK==return_code) && totalTime) cout<<"耗时:"<<totalTime<<endl; long downLength = 0; return_code = curl_easy_getinfo(easy_handle,CURLINFO_CONTENT_LENGTH_DOWNLOAD,&downLength); if((CURLE_OK==return_code) && downLength) cout<<"下载的文件大小:"<<downLength<<endl; long retcode = 0; return_code = curl_easy_getinfo(easy_handle, CURLINFO_RESPONSE_CODE , &retcode); if((CURLE_OK==return_code) && retcode) cout<<"状态码:"<<retcode<<endl; char *contentType={0}; return_code = curl_easy_getinfo(easy_handle, CURLINFO_CONTENT_TYPE , &contentType); if((CURLE_OK==return_code) && contentType) cout<<"请求的文件类型:"<<contentType<<endl; //输出cookie信息 print_cookies(easy_handle); long filetime = 0; return_code = curl_easy_getinfo(easy_handle, CURLINFO_FILETIME , &filetime); if((CURLE_OK==return_code) && filetime) cout<<"远程获取文档的时间:"<<filetime<<endl; long namelookuptime = 0; return_code = curl_easy_getinfo(easy_handle, CURLINFO_NAMELOOKUP_TIME , &namelookuptime); if((CURLE_OK==return_code) && namelookuptime) cout<<"名称解析所消耗的时间:"<<namelookuptime<<""<<endl; long requestSize = 0; return_code = curl_easy_getinfo(easy_handle, CURLINFO_REQUEST_SIZE , &requestSize); if((CURLE_OK==return_code) && requestSize) cout<<"请求头大小:"<<requestSize<<"字节"<<endl; long headerSize = 0; return_code = curl_easy_getinfo(easy_handle, CURLINFO_HEADER_SIZE , &headerSize); if((CURLE_OK==return_code) && headerSize) cout<<"响应头大小:"<<headerSize<<"字节"<<endl; //获取URL重定向地址 curl_easy_setopt(easy_handle, CURLOPT_FOLLOWLOCATION, true); char* redirectUrl = {0}; return_code = curl_easy_getinfo(easy_handle, CURLINFO_REDIRECT_URL , &redirectUrl); if((CURLE_OK==return_code) && redirectUrl) cout<<"URL重定向地址:"<<redirectUrl<<endl; else cout<<"URL重定向地址:"<<NULL<<endl; char *ipAddress={0}; return_code = curl_easy_getinfo(easy_handle, CURLINFO_PRIMARY_IP,&ipAddress); if((CURLE_OK==return_code) && ipAddress) cout<<"请求的服务器IP:"<<ipAddress<<endl; long downloadSpeed = 0; return_code = curl_easy_getinfo(easy_handle, CURLINFO_SPEED_DOWNLOAD , &downloadSpeed); if((CURLE_OK==return_code) && downloadSpeed) printf("平均下载速度: %0.3f kb/s.\n", downloadSpeed/ 1024); ////////////////////////////////////////////////////////////////////////// // 释放资源 fclose(fp); curl_easy_cleanup(easy_handle); curl_global_cleanup(); getchar(); return 0; }
版权
原文地址:曾是土木人