c++开发,利用curl发送http请求

2024-08-24 20:52
文章标签 c++ 开发 http 请求 发送 curl

本文主要是介绍c++开发,利用curl发送http请求,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网络编程是大家在进行程序开发时,必不可少的一部分,但是进行c++开发的人员都知道在c++中只有原生的socket网络编程,这种网络编程适合与服务器和客户端都是自己开发的情况,但是如果你想要你的程序访问别人的接口或者公共的API,这个原生的套接字就达不到你想要的目的了,比如你不是IP地址了,而是一个域名,这通常需要进行域名解析,但是原生套接字是满足不了的,这个时候就需要借助一些第三方的开源库来解决这类问题,这里我们就来介绍一种发送网络请求的开源库CURL,我们分别介绍在Windows和Linux环境下c++开发配置这个CURL库

Windows环境c++程序配置curl库

在Windows上想要配置curl库,需要自己下载源码然后编译成动态库或者静态库文件,下面就跟随着我来配置一下

下载curl源码

下载地址:https://github.com/curl/curl 选择一个你想要的版本下载即可

进入下载的源码文件夹,执行buildconf.bat文件,进行编译的配置

使用VS2019的命令行工具编译curl

以管理员权限运行x64 Native Tools Command Prompt for VS 2019工具

进入winbuild目录下,进行curl库的编译

编译命令:nmake /f Makefile.vc mode=static VC=15 MACHINE=x64 DEBUG=yes

mode表示编译模式,static则是静态编译,也就是编译静态库

VC表示编译器的版本,通常15表示VS2019,14表示VS2017

MACHINE表示架构的意思,如果想编辑x86架构的版本,则将此项的值替换为x86

DEBUG表示是否在调式环境下使用,如果想编译Release版本,则将该项的值替换为no

编译完成之后,就会在builds目录下生成编译静态库和相关文件

主要关注这个文件夹,其他的都是编译时的中间产物

这里面是程序需要用到的头文件和静态库文件

给c++程序配置curl环境

将上面文件夹中的头文件和静态库复制到项目目录下,然后在项目的属性中进行配置

在包含目录和库目录下添加..表示把当前项目目录也加入程序查找头文件和库文件的位置

在预处理器定义中添加CURL_STATICLIB

在附加依赖项中添加静态库文件,libcurl_a.lib;Ws2_32.lib;Wldap32.lib;winmm.lib;Crypt32.lib;Normaliz.lib;

把运行库改为/MDd

好了,现在环境就配置完了,下面就使用测试代码,来测试一下curl环境配置的是否正确

测试代码:

#include <iostream>
#include <string>
#include <map>
#include "include/curl/curl.h"// @brief curl发送http请求调用的回调函数,回调函数中对返回的json格式的body进行了解析,解析结果储存在result中
// @param 参数定义见libcurl库文档
// @return 返回值定义见libcurl库文档
static size_t callback(void* ptr, size_t size, size_t nmemb, void* stream) {// 获取到的http body存放在ptr中,先将其转换为string格式std::string s((char*)ptr, size * nmemb);std::string* result = static_cast<std::string*>(stream);*result += s;return size * nmemb;
}int main() {// 服务地址// libcurl默认是不支持SSL的, 如果需要支持https,请在libcurl的编译选项中设置std::string url = "http://httpbin.org/ip";// 发送请求CURL* curl;CURLcode result_code;int error_code = 0;curl = curl_easy_init();if (curl) {std::string curl_result;curl_easy_setopt(curl, CURLOPT_URL, url.c_str());curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);curl_easy_setopt(curl, CURLOPT_WRITEDATA, &curl_result);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);result_code = curl_easy_perform(curl);if (result_code != CURLE_OK) {std::cout << "curl_easy_perform() failed: " << curl_easy_strerror(result_code) << std::endl;return -1;}curl_easy_cleanup(curl);std::cout << "返回结果为:" << std::endl;std::cout << curl_result << std::endl;}return 0;
}

Linux环境c++程序配置curl库

在Linux下可以直接通过命令,来安装curl库,如果你使用的Linux没有对应的安装命令,则也可以通过源码的方式进行编译和项目配置

命令:apt install curl libcurl4-openssl-dev

程序中使用curl,在编译时需要加上-lcurl -std=c++11来指明库文件的引用

好了,到这里c++程序开发配置curl环境就介绍完了

感谢观看学习,大佬们多多指点,愿明天的自己会感谢当下的努力!!!!

这篇关于c++开发,利用curl发送http请求的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1103579

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名