VS2019利用Curl库实现HTTP网络通信(C++)

您所在的位置:网站首页 vscode配置curl VS2019利用Curl库实现HTTP网络通信(C++)

VS2019利用Curl库实现HTTP网络通信(C++)

2024-07-14 22:22| 来源: 网络整理| 查看: 265

        C++实现HTTP网络通信,一般采用两种方式,熟悉TCP协议的大哥可能不需要查这方面的知识;还有一种方式就是使用第三方库,Qt环境下可以用QNetworkRequest实现很方便,再就是Curl了,Curl是个独立的第三方库,不依赖于qt环境,可以实现GET和POST方式通信。

​         先说环境,VS2019;

一、Curl环境搭建

​         调用Curl的静态库/动态库是需要自己编译的;

1.1 文件下载

​         打开下载地址(curl - Download)下载对应版本的curl压缩包,本文下载7.65.0版本(也尝试了新版的7.8.0,但下一步编译未成功);

1.2 编译

​         下载好的文件解压缩到指定文件夹,然后双击运行【../curl-7.65.0/buildconf.bat】,一闪而过就结束了;

        ​ 在开始菜单的VS中找到【x64 Native Tools Command Prompt for VS 2019】,点击打开;

        进入到【../curl-7.65.0/winbuild】目录下,执行【nmake /f Makefile.vc mode=static VC=15 MACHINE=x64 DEBUG=no】;

        ​ 参数含义:

nmake /f Makefile.vc mode=static // 静态编译,也可mode=dll VC=15 // vc版本 MACHINE=x64 // 64或32位 DEBUG=no // 改成yes就是Debug

         等待两三分钟,编译完成进入【../curl-7.65.0/builds】可见以下文件,第一个就是我们需要的,至此编译完成;

1.3 Curl开发环境配置

        新建一个测试工程,由于名字太长,将1.2步骤编译生成的文件夹重命名为【curl】,内含如下文件夹;

         右键工程属性,在VC++选项卡内,分别设置包含目录【../curl/include】库目录【../curl/lib】;

         C/C++选项卡,预处理器添加【CURL_STATICLIB】;

 链接器/输入选项卡,附加依赖项添加

libcurl_a.lib Ws2_32.lib Wldap32.lib winmm.lib Crypt32.lib Normaliz.lib

         至此环境搭建完成,后续就可以在项目中正常使用了。

二、利用Curl库实现HTTP网络通信 2.1 测试

        ​ 测试代码如下:

#include void testCurlFunc() { CURL* curl = 0; CURLcode res; curl = curl_easy_init(); if (curl != 0) { // 设置url curl_easy_setopt(curl, CURLOPT_URL, "https://www.baidu.com"); //www.baidu.com 可能会跳转,所以设置为跟随跳转 curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); // 发出请求 res = curl_easy_perform(curl); // 返回状态检查 if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } // 任务完成,清理工作 curl_easy_cleanup(curl); } }

        打印信息如下所示,表明成功:

2.2 关于打印信息乱码

        ​ 可以看到其中中文是乱码,这是由于返回的响应数据是utf编码方式,而debug或cout打印是GBK,可以在cout前面加一句【SetConsoleOutputCP(CP_UTF8);】,将打印编码设置为utf8就不乱码了,效果如下;

三、使用CURL发送GET请求

​         代码如下:

#include using namespace std; //get请求和post请求数据响应函数 size_t req_reply(void *ptr, size_t size, size_t nmemb, void *stream) { //在注释的里面可以打印请求流,cookie的信息 //cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3