c/c++编译使用curl发送网络请求
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2021-05-11 15:10:03
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
编译Curl
下载地址
https://curl.haxx.se/download.html
下载完成后解压,然后打开如下路径来启动对应版本的vs,我用的是vs2015所以打开啦vc14
使用vs打开之后就可以编译啦,选择dll Release然后生成解决方案
编译带ssl的库
打开project目录下面read.md说明文件
下载对应的两个库的源码到对应的路径
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")