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

2.使用vs命令行控制台,切换到 cd curl-7.70.0\winbuild

3.执行编译选项,两种方式均可。

nmake /f Makefile.vc mode=dll VC=13 MACHINE=x86 DEBUG=no
nmake /f Makefile.vc mode=static VC=13 MACHINE=x86 DEBUG=no

4.测试curl是否可用

#define CURL_STATICLIB
#include <stdio.h>
#include "curl/curl.h"
#pragma comment ( lib, "libcurl.lib" )
int main(void)
	CURL *curl;
	CURLcode res;
	curl = curl_easy_init();
	if (curl)
		curl_easy_setopt(curl, CURLOPT_URL,"http://www.baidu.com");
		res = curl_easy_perform(curl);
		curl_easy_cleanup(curl);
	printf("%d \n", curl);
	system("pause");
	return 0;

.初始化,获取http请求头
CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );

#include <stdio.h>
#include "curl/curl.h"
#pragma comment ( lib, "libcurl.lib" )
int main(void)
	CURLcode return_code;
	return_code = curl_global_init(CURL_GLOBAL_WIN32);
	printf("初始化状态: %d \n", return_code);
	if (CURLE_OK != return_code)
		return -1;
	struct curl_slist *headers = NULL;
	headers = curl_slist_append(headers, "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0)");
	headers = curl_slist_append(headers, "Referer: https://www.baidu.com");
	CURL *easy_handle = curl_easy_init();
	if (NULL != easy_handle)
		curl_easy_setopt(easy_handle, CURLOPT_HTTPHEADER, headers);        // 改协议头
		curl_easy_setopt(easy_handle, CURLOPT_URL, "https://cn.bing.com"); // 请求的网站
		return_code = curl_easy_perform(easy_handle);                      // 执行CURL
		long retcode = 0;
		return_code = curl_easy_getinfo(easy_handle, CURLINFO_RESPONSE_CODE, &retcode);
		if ((CURLE_OK == return_code) && retcode)
			printf("请求状态码: %d \n", retcode);
		char *ipAddress = { 0 };
		return_code = curl_easy_getinfo(easy_handle, CURLINFO_PRIMARY_IP, &ipAddress);
		if ((CURLE_OK == return_code) && ipAddress)
			printf("目标IP地址: %s \n", ipAddress);
		char *contentType = { 0 };
		return_code = curl_easy_getinfo(easy_handle, CURLINFO_CONTENT_TYPE, &contentType);
		if ((CURLE_OK == return_code) && contentType)
			printf("请求的文件类型: %s \n", contentType);
		long requestSize = 0;
		return_code = curl_easy_getinfo(easy_handle, CURLINFO_REQUEST_SIZE, &requestSize);
		if ((CURLE_OK == return_code) && requestSize)
			printf("请求头大小: %d \n", requestSize);
		long headerSize = 0;
		return_code = curl_easy_getinfo(easy_handle, CURLINFO_HEADER_SIZE, &headerSize);
		if ((CURLE_OK == return_code) && headerSize)
			printf("响应头大小: %d \n", headerSize);
	curl_easy_cleanup(easy_handle);
	curl_global_cleanup();
	system("pause");
	return 0;

libcurl 获取源代码并下载

#include <stdio.h>
#include "curl/curl.h"
#pragma comment ( lib, "libcurl.lib" )
FILE *fp;
size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
	int written = fwrite(ptr, size, nmemb, (FILE *)fp);
	return written;
BOOL GetUrl(char *URL, char *FileName)
	CURL *curl;
	curl_global_init(CURL_GLOBAL_ALL);
	curl = curl_easy_init();
	curl_easy_setopt(curl, CURLOPT_URL, URL);
	if ((fp = fopen(FileName, "w")) == NULL)
		curl_easy_cleanup(curl);
		return FALSE;
	// CURLOPT_WRITEFUNCTION 将后继的动作交给write_data函数处理
	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
	curl_easy_perform(curl);
	curl_easy_cleanup(curl);
	return TRUE;
int main(int argc, char *argv[])
	GetUrl("https://www.baidu.com", "c://baidu.html");
	system("pause");
	return 0;

libCURL 获取网页请求:

#include <stdio.h>
#include "curl/curl.h"
#pragma comment ( lib, "libcurl.lib" )
static size_t write_data(char *d, size_t n, size_t l, void *p)
	return 0;
void GetStatus(char *Host)
	CURLcode return_code;
	return_code = curl_global_init(CURL_GLOBAL_WIN32);
	if (CURLE_OK != return_code)
		return;
	struct curl_slist *headers = NULL;
	headers = curl_slist_append(headers, "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0)");
	headers = curl_slist_append(headers, "Referer: https://www.baidu.com");
	CURL *easy_handle = curl_easy_init();
	if (NULL != easy_handle)
		curl_easy_setopt(easy_handle, CURLOPT_HTTPHEADER, headers);         // 改协议头
		curl_easy_setopt(easy_handle, CURLOPT_URL, Host);                   // 请求的网站
		curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, write_data);   // 设置回调函数,屏蔽输出
		return_code = curl_easy_perform(easy_handle);                       // 执行CURL
		char *ipAddress = { 0 };
		return_code = curl_easy_getinfo(easy_handle, CURLINFO_PRIMARY_IP, &ipAddress);
		if ((CURLE_OK == return_code) && ipAddress)
			printf("目标IP: %13s --> ", ipAddress);
		long requestSize = 0;
		return_code = curl_easy_getinfo(easy_handle, CURLINFO_REQUEST_SIZE, &requestSize);
		if ((CURLE_OK == return_code) && requestSize)
			printf("请求头: %5d --> ", requestSize);
		long headerSize = 0;
		return_code = curl_easy_getinfo(easy_handle, CURLINFO_HEADER_SIZE, &headerSize);
		if ((CURLE_OK == return_code) && headerSize)
			printf("响应头: %5d --> ", headerSize);
		long retcode = 0;
		return_code = curl_easy_getinfo(easy_handle, CURLINFO_RESPONSE_CODE, &retcode);
		if ((CURLE_OK == return_code) && retcode)
			printf("状态码: %5d \n", retcode);
	curl_easy_cleanup(easy_handle);
	curl_global_cleanup();
int main(int argc, char *argv[])
	GetStatus("https://www.baidu.com");
	system("pause");
	return 0;

LibCURL发送POST数据:

#include <stdio.h>
#include "curl/curl.h"
#pragma comment ( lib, "libcurl.lib" )
bool Post(char *Url,char *Cookie,char *PostVal)
	CURL *curl;
	CURLcode res;
	curl = curl_easy_init();
	if (curl)
		curl_easy_setopt(curl, CURLOPT_URL,Url);                        // 指定url
		curl_easy_setopt(curl, CURLOPT_COOKIEFILE, Cookie);             // 指定cookie文件
		curl_easy_setopt(curl, CURLOPT_POSTFIELDS, PostVal);            // 指定post内容
		// curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");  // 是否代理
		res = curl_easy_perform(curl);
		curl_easy_cleanup(curl);
	return true;
int main(int argc,char *argv[])
	Post("https://www.baidu.com/post.php", "exfffffx", "&logintype=uid&u=xieyan&psw=xxx86");
	system("pause");
	return 0;

libCURL 获取页面源码并下载:

// ENABLE_IDN=no
#include <stdio.h>
#include "curl/curl.h"
#pragma comment ( lib, "libcurl.lib" )
FILE *fp;
size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
	int written = fwrite(ptr, size, nmemb, (FILE *)fp);
	return written;
BOOL GetUrl(char *URL, char *FileName)
	CURL *curl;
	curl_global_init(CURL_GLOBAL_ALL);
	curl = curl_easy_init();
	curl_easy_setopt(curl, CURLOPT_URL, URL);
	curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);       // 在屏幕打印请求连接过程和返回http数据
	curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 1);      // 查找次数,防止查找太深
	curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3); // 连接超时
	curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);        // 接收数据时超时设置
	if ((fp = fopen(FileName, "w")) == NULL)
		curl_easy_cleanup(curl);
		return FALSE;
	// CURLOPT_WRITEFUNCTION 将后继的动作交给write_data函数处理
	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
	curl_easy_perform(curl);
	curl_easy_cleanup(curl);
	return TRUE;
int main(int argc, char *argv[])
	GetUrl("https://www.baidu.com", "c://baidu.html");
	system("pause");
	return 0;