libcurl库的简单使用

#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <process.h>
#include <string>
#include <curl.h>
#pragma comment ( lib, "ws2_32.lib" )
#pragma comment ( lib, "wldap32.lib" )
#ifdef _DEBUG
#pragma comment(lib,"libcurld.lib")
#else
#pragma comment(lib,"libcurl.lib")
#endif
size_t write_callback(char* ptr, size_t size, size_t nmemb, std::string& userdata);
int main()
{
	CURL* curl;
	CURLcode CurlCode;
	struct curl_slist* headerlist = NULL;
	CurlCode = curl_global_init(CURL_GLOBAL_ALL);	//这个函数设置libcurl需要的程序环境 这个函数只能用一次。(其实在调用curl_global_cleanup 函数后仍然可再用)
	if (CurlCode != CURLE_OK)return 0;
	curl = curl_easy_init();	//初始化
	if (curl)
	{
		curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");
		curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
		/*添加请求头*/
		//headerlist = curl_slist_append(headerlist, "Content-Type:application/json");
		headerlist = curl_slist_append(headerlist, "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
		headerlist = curl_slist_append(headerlist, "Accept-Language:zh-CN,zh;q=0.9");
		curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookie.txt");        //把服务器发过来的cookie保存到cookie.txt
		curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);	//设置HTTP请求头
		char url[] = "http://www.baidu.com/";
		curl_easy_setopt(curl, CURLOPT_URL, url);
		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);	//设置写的回调函数
		std::string content;
		curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);
		curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);//winssl编译时使用windows自带的根证书
		curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L);
		CurlCode = curl_easy_perform(curl);	//执行请求
		printf("%s\r\n", content.c_str());
		curl_easy_cleanup(curl);	//释放资源
		curl_slist_free_all(headerlist);
		headerlist = NULL;
	}
	curl_global_cleanup();//在结束libcurl使用的时候,用来对curl_global_init做的工作清理。类似于close的函数
	system("pause");
	return 0;
}
size_t write_callback(char* ptr, size_t size, size_t nmemb, std::string& userdata)
{
	size_t rest = 0;
	LONG lsize = size * nmemb;
	std::string stemp(ptr, lsize);
	userdata += stemp;
	return lsize;
}

  下载 libcurl  https://curl.haxx.se/download.html

 

帮助文档 https://curl.haxx.se/libcurl/c/

参考文章:http://blog.csdn.net/dearwind153/article/details/51914985

参考:https://www.cnblogs.com/hongfei/p/3469982.html
 注意:如果使用静态连接库的话需要设置 预处理器定义 CURL_STATICLIB

 

 
posted @ 2018-01-10 16:20  轻风々  阅读(365)  评论(0编辑  收藏  举报