c/c++编译使用curl发送网络请求

来源:赵克立博客 分类: C/C++ 标签:curl发布时间:2018-06-25 17:23:14最后更新:2021-05-11 15:10:03浏览:2341
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2021-05-11 15:10:03
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

编译Curl

下载地址

https://curl.haxx.se/download.html


image.png

下载完成后解压,然后打开如下路径来启动对应版本的vs,我用的是vs2015所以打开啦vc14

image.png

使用vs打开之后就可以编译啦,选择dll Release然后生成解决方案


编译带ssl的库

打开project目录下面read.md说明文件

2105111620715294500153.png

下载对应的两个库的源码到对应的路径

git clone https://github.com/openssl/openssl.git
git clone https://github.com/libssh2/libssh2.git

然后在project目录里执行

build-openssl vc14 x64 release  ../openssl  -VSpath "D:\Program Files (x86)\Microsoft Visual Studio 14.0" -perlpath "D:\Perl"

注意上面的路径,如果安装时是默认的话就可以忽略,开始黑屏滚动,好久好久(视电脑配置)


Curl用法

dll引用

进入目录curl-7.60.0\build\Win32\VC6\DLL Release将libcurl.dll和libcurl.lib分别拷贝到curl项目目录下,也可以直接在项目中使用相对路径来引用但是dll文件要复制过来

// pachong.cpp : Defines the entry point for the console application.
//

#include <stdio.h>  
#include <iostream>  
#include <Windows.h>    
#include <tchar.h>
#include "../../curl-7.60.0/include/curl/curl.h"    

#pragma comment(lib, "../../curl-7.60.0/build/Win32/VC14/DLL Release/libcurl.lib")     

using namespace std;

size_t write_data(char *buffer, size_t size, size_t nitems, void *outstream)
{
	int written = fwrite(buffer, size, nitems, (FILE*)outstream);
	return written;
}

void  anaylize_data()
{

}

int _tmain(int argc, _TCHAR* argv[])
{
	// 将源码写到文件里  
	CURL *pCurl;
	FILE* pFile = fopen("baidu.txt", "wb");
	pCurl = curl_easy_init();
	curl_easy_setopt(pCurl, CURLOPT_WRITEDATA, (void*)pFile);
	curl_easy_setopt(pCurl, CURLOPT_WRITEFUNCTION, write_data);
	curl_easy_setopt(pCurl, CURLOPT_URL, "http://www.baidu.com");
	curl_easy_perform(pCurl);
	fclose(pFile);
	curl_easy_cleanup(pCurl);

	//显示在终端上  
	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);
		curl_global_init(CURL_GLOBAL_ALL);
	}
	system("pause");

	//网页已经被down下来了。
	//开始分析里边的数据
	anaylize_data();

	return 0;
}



静态引用


如果是静态引用则需要添加预处理宏定义,否则会报error LNK2019: 无法解析的外部符号 __imp__curl_easy_init,该符号在函数 _main 中被引用 这个错误。

BUILDING_LIBCURL
CURL_STATICLIB

然后

#include <curl/curl.h>
#pragma comment(lib, "libcurl.lib")



微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python