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

相关文章

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t