libcurl使用示例

来源:互联网 发布:远程电脑监控软件 编辑:程序博客网 时间:2024/05/13 01:00

简要说明:C++使用libcurl访问"www.baidu.com",获取返回码和打印出http文件

/* * @ libcurl使用示例 * @ 2014.04.29 * @ g++ -o LibCurlFunc LibCurlFunc.cpp -lcurl */#include <iostream>#include <string.h>#include <curl/curl.h>using namespace std;/* Http请求结束的回调函数@ 会被调用多次,有下载到数据(http文件)就回调,直到下载完 */static size_t WriteFunction(void *input, size_t uSize, size_t uCount, void *avg){/* cout << "[WriteFunction]:" << endl << "input=" << (char*)input << endl << "elementSize=" << uSize << endl << "elementCount=" << uCount << endl;*/ // 将请求返回数据input拷贝到avg中(avg为一开始curl_easy_setopt设置的参)size_t uLen = uSize*uCount;// string &sBuffer = *reinterpret_cast<string *>(avg);// sBuffer.append(reinterpret_cast<const char *>(input), uLen);string *pStr = (string *)(avg);pStr->append((char *)(input), uLen);// 只有返回uSize*uCount才会返回成功return uLen;}int main(){CURL *pCurl = NULL;CURLcode code;/* CURLcode curl_global_init(long flags)   @ 初始化libcurl,全局只需调一次   @ flags:CURL_GLOBAL_DEFAULT // 等同于CURL_GLOBAL_ALL CURL_GLOBAL_ALL     // 初始化所有的可能的调用CURL_GLOBAL_SSL     // 初始化支持安全套接字层CURL_GLOBAL_WIN32   // 初始化win32套接字库              CURL_GLOBAL_NOTHING // 没有额外的初始化    ...... */code = curl_global_init(CURL_GLOBAL_DEFAULT);if (code != CURLE_OK) {cout << "curl_global_init() Err" << endl;return -1;}/* CURL *curl_easy_init()   @ 初始化curl生成CURL *curl指针 */pCurl = curl_easy_init();if (pCurl == NULL) {cout << "curl_easy_init() Err" << endl;return -1;}string sUrl = "www.baidu.com";curl_slist *pHeaders = NULL;string sBuffer;/* struct curl_slist *curl_slist_append(struct curl_slist * list, const char * string);   @ 添加Http消息头   @ 属性string:形式为name+": "+contents */string header = "username: andyawang";pHeaders = curl_slist_append(pHeaders, header.c_str());/* CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);   @ 设置下载属性及常用参数 */curl_easy_setopt(pCurl, CURLOPT_URL, "www.baidu.com"); // 访问的URLcurl_easy_setopt(pCurl, CURLOPT_HTTPHEADER, pHeaders);  // 属性头部(要不pHeader就没用了)curl_easy_setopt(pCurl, CURLOPT_TIMEOUT, 20); // 超时(单位S)curl_easy_setopt(pCurl, CURLOPT_HEADER, 1); // 下载数据包括HTTP头部curl_easy_setopt(pCurl, CURLOPT_WRITEFUNCTION, &WriteFunction);// !数据回调函数curl_easy_setopt(pCurl, CURLOPT_WRITEDATA, &sBuffer);// !数据回调函数的参,一般为Buffer或文件fd/* CURLcode curl_easy_perform(CURL *handle);   @ 开始下载 */code = curl_easy_perform(pCurl);if (code != CURLE_OK) {cout << "curl_easy_perform() Err" << endl;return -1;}/* CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );   @ 获取下载完的相关信息   @ info:CURLINFO_RESPONSE_CODE  // 获取返回的Http码   CURLINFO_TOTAL_TIME  // 获取总的请求下载时间   CURLINFO_SIZE_DOWNLOAD  // 获取下载的文件大小   ...... */long retCode = 0;code = curl_easy_getinfo(pCurl, CURLINFO_RESPONSE_CODE , &retCode); if (code != CURLE_OK) {cout << "curl_easy_perform() Err" << endl;return -1;}cout << "[Http Return Code] : " << retCode << endl;cout << "[Http Context] : " << endl << sBuffer << endl;/* void curl_easy_cleanup(CURL * handle);   @ 释放CURL *curl指针 */curl_easy_cleanup(pCurl);/* void curl_global_cleanup(void);   @ 初始化libcurl,全局也只需调一次 */curl_global_cleanup();}

运行结果:

gapp_devnet_1:/data/home/andyawang/code/Components/Http # g++ -o LibCurlFunc LibCurlFunc.cpp -lcurlgapp_devnet_1:/data/home/andyawang/code/Components/Http # ./LibCurlFunc [Http Return Code] : 200[Http Context] : HTTP/1.0 200 OKDate: Wed, 30 Apr 2014 02:41:35 GMTContent-Type: text/html; charset=utf-8Vary: Accept-EncodingSet-Cookie: BAIDUID=8DD8F93E631536AD6CDC010E1A52507C:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.comSet-Cookie: BDSVRTM=0; path=/Set-Cookie: H_PS_PSSID=5695_1428_5225_6024_4760_6018_6256_6311_6269; path=/; domain=.baidu.comP3P: CP=" OTI DSP COR IVA OUR IND COM "Cache-Control: privateExpires: Wed, 30 Apr 2014 02:41:33 GMTX-Powered-By: HPHPServer: BWS/1.1BDPAGETYPE: 1BDQID: 0x9fcc512a0001374fBDUSERID: 0X-Cache: MISS from qplus_wanproxy_pub_fy1Via: 1.0 qplus_wanproxy_pub_fy1 (squid/3.1.18)Connection: close<!DOCTYPE html><!--STATUS OK--><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"><link rel="dns-prefetch" href="//s1.bdstatic.com"/><link rel="dns-prefetch" href="//t1.baidu.com"/><link rel="dns-prefetch" href="//t2.baidu.com"/><link rel="dns-prefetch" href="//t3.baidu.com"/><link rel="dns-prefetch" href="//t10.baidu.com"/><link rel="dns-prefetch" href="//t11.baidu.com"/><link rel="dns-prefetch" href="//t12.baidu.com"/><title>百度一下,你就知道</title><style >html,body{height:100%}html{overflow-y:auto}#wrapper{position:relative;_position:;min-height:100%}#content{padding-bottom:100px;text-align:center}#ftCon{height:100px;position:absolute;bottom:44px;text-align:center;width:100%;margin:0 auto;......




4 0
原创粉丝点击