curl c++ 实现HTTP GET和POST请求
环境配置
curl //DV2020T环境下此步骤可省略
https://curl.se/download/
笔者安装为7.85.0版本
./configure --without-ssl
make
sudo make install
sudo rm /usr/local/lib/curl
系统也有curl库,为防止冲突,删去编译好的curl库。
对以json数据的解析使用开源项目:https://github.com/nlohmann/json
cd single_include 在这个文件夹里有json.hpp文件,我们只需要包含这一个头文件即可,它不能编译,更没有库。
Makefile文件
CC=g++
SDK_PATH=./include
CFLAGS=-Wno-multichar -I $(SDK_PATH) -fno-rtti
LDFLAGS=-lm -ldl -lpthread -std=c++11 -lcurlHEADERS= \
SRCS= main.cpp\
HTTP: $(SRCS) $(HEADERS) $(CC) -o HTTP $(SRCS) $(CFLAGS) $(LDFLAGS) -g
clean:rm -f HTTP
GET请求
//curl -v -X GET http://192.168.100.77:1985/api/v1/clients/
//GET http://192.168.100.77:1985/api/v1/clients
#include "curl/curl.h"
//get请求
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <iostream>
#include <unistd.h>
#include "nlohmann/json.hpp"
using json = nlohmann::json;
using namespace std;/*
* ptr 表示收到服务器返回数据的首地址
* size 表示返回每个数据的大小
* nmemb 表示返回数据的个数
* userdata 用户给该回调函数传递的形参 curl_easy_setopt(curl, CURLOPT_WRITEDATA, "abc"); 设置的字符串"abc"
* 这个可以用来标识传输命令 返回的数据 来自命令 "abc",根据这个命令来处理这个数据
*/size_t write_callback(void *ptr, size_t size, size_t nmemb, void *stream)
{//在注释的里面可以打印请求流,cookie的信息//cout << "----->reply" << endl;string *str = (string*)stream;//cout << *str << endl;(*str).append((char*)ptr, size*nmemb);return size * nmemb;
}int main(void) {//1. 创建一个curl句柄CURL* curl = nullptr;CURLcode res;//2. 初始化一个curl句柄curl = curl_easy_init();//3. 给该句柄设定一些参数 (封装一个http请求消息) "127.0.0.1", "/login", "id=liukang&pw=123"// curl_easy_setopt(curl, CURLOPT_URL, "http://39.98.187.101:1985/api/v1/clients/?count=10"); //http://www.baidu.com //getcurl_easy_setopt(curl, CURLOPT_URL, "http://39.98.187.101:1985/api/v1/clients/y2o21qc7"); //http://www.baidu.comcurl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");//给当前句柄设置一个 处理从服务器返回数据的回调函数curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); //TODO:string response;//给回调函数传递一个形参curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&response);//4. 将curl句柄 向远程服务器 提交请求 并得到一个返回值res = curl_easy_perform(curl); //阻塞等待服务器返回if(res != CURLE_OK) {printf("curl easy perform error res = %d\n", res);return 1;}sleep(2);cout << "response : " << response << endl;//5. 处理服务器返回数据//6. 清空 释放句柄内存空间curl_easy_cleanup(curl);return 0;
}
DELETE请求
// curl -v -X DELETE http://192.168.100.77:1985/api/v1/clients/10v8gi07
#include "curl/curl.h"
//get请求
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <iostream>
#include <unistd.h>
using namespace std;/*
* ptr 表示收到服务器返回数据的首地址
* size 表示返回每个数据的大小
* nmemb 表示返回数据的个数
* userdata 用户给该回调函数传递的形参 curl_easy_setopt(curl, CURLOPT_WRITEDATA, "abc"); 设置的字符串"abc"
* 这个可以用来标识传输命令 返回的数据 来自命令 "abc",根据这个命令来处理这个数据
*/size_t write_callback(void *ptr, size_t size, size_t nmemb, void *stream)
{//在注释的里面可以打印请求流,cookie的信息//cout << "----->reply" << endl;string *str = (string*)stream;//cout << *str << endl;(*str).append((char*)ptr, size*nmemb);return size * nmemb;
}int main(void) {//1. 创建一个curl句柄CURL* curl = nullptr;CURLcode res;//2. 初始化一个curl句柄curl = curl_easy_init();//3. 给该句柄设定一些参数 (封装一个http请求消息) "127.0.0.1", "/login", "id=liukang&pw=123"curl_easy_setopt(curl, CURLOPT_URL, "http://39.98.187.101:1985/api/v1/clients/"); //http://www.baidu.com //get//给当前句柄设置一个 处理从服务器返回数据的回调函数curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); //TODO:string response;//给回调函数传递一个形参curl_easy_setopt(curl, CURLOPT_WRITEDATA, (string*)&response);//4. 将curl句柄 向远程服务器 提交请求 并得到一个返回值res = curl_easy_perform(curl); //阻塞等待服务器返回if(res != CURLE_OK) {printf("curl easy perform error res = %d\n", res);return 1;}sleep(2);cout << "response : " << response << endl;//5. 处理服务器返回数据
json jsonContent = json::parse(response);
string cid = jsonContent["id"];//6. 清空 释放句柄内存空间curl_easy_cleanup(curl);return 0;
}
相关文章:
curl c++ 实现HTTP GET和POST请求
环境配置 curl //DV2020T环境下此步骤可省略 https://curl.se/download/ 笔者安装为7.85.0版本 ./configure --without-ssl make sudo make install sudo rm /usr/local/lib/curl 系统也有curl库,为防止冲突,删去编译好的curl库。 对以json数据的解析使…...

12、设计模式之代理模式(Proxy)
一、什么是代理模式 代理模式属于结构型设计模式。为其他对象提供一种代理以控制对这个对象的访问。 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 二、分类 代理模式分为三类&#…...
springboot集成Quartz定时任务组件
文章目录 前言一、Quartz 是什么?下面是对 Java 中 Quartz 的主要概念的简单描述: 二、使用步骤总结 前言 平时开发中相信大家都经常用到定时任务吧,最近简单的就是直接使用Scheduled注解标注到方法上用注解的方式在项目运行时无法去对任务进…...
代码随想录算法训练营第38天—动态规划06 | ● 完全背包 ● *518. 零钱兑换 II ● 377. 组合总和 Ⅳ
完全背包 视频讲解:https://www.bilibili.com/video/BV1uK411o7c9 https://programmercarl.com/%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80%E5%AE%8C%E5%85%A8%E8%83%8C%E5%8C%85.html 题目描述:有n件物品和一个最多能…...
C语言每日一题(63)复写零
题目链接 力扣网 1089 复写零 题目描述 给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改,不…...
ElasticSearch聚合查询
数据准备 索引创建 PUT product {"mappings": {"properties": {"createtime": {"type": "date"},"desc": {"type": "text","fields": {"keyword": {"type": …...

【毕设级项目】基于AI技术的多功能消防机器人(完整工程资料源码)
基于AI技术的多功能消防机器人演示效果 竞赛-基于AI技术的多功能消防机器人视频演示 前言: 随着“自动化、智能化”成为数字时代发展的关键词,机器人逐步成为社会经济发展的重要主体之一,“机器换人”成为发展的全新趋势和时代潮流。在可预见…...

【一】【设计模式】类关系UML图
1. 继承(Generalization) 继承是对象间的一种层次关系,允许子类继承并扩展父类的功能。 UML线:带有空心箭头的直线,箭头指向基类(父类)。 class Parent {public void parentMethod() {System.…...
【DevOps基础篇】容器化架构基础设施监控方案
【DevOps基础篇】容器化架构基础设施监控方案 目录 【DevOps基础篇】容器化架构基础设施监控方案要监视什么不同监控系统方案比较1. Datadog2. Prometheus3. ELK(Elasticsearch、Logstash、Kibana)4. Sysdig5. 自行打造!如何选择总结推荐超级课程: Docker快速入门到精通 当…...

【QT】文件流操作(QTextStream/QDataStream)
文本流/数据流(二级制格式) 文本流 (依赖平台,不同平台可能乱码)涉及文件编码 #include <QTextStream>操作的都是基础数据类型:int float string //Image Qpoint QRect就不可以操作 需要下面的 …...

CentOS 7 devtoolset编译addressSanitizer版本失败的问题解决
在我的一个Cent OS7开发环境中,按https://yeyongjin.blog.csdn.net/article/details/134178420的方法升级GCC版本到8.3.1。 这两天,要用Google的addressSanitizer检验内存问题,加上编译参数后,却发现编译不通过。configure时直接退…...

ubuntu2004桌面系统英伟达显卡驱动安装方法
#如何查看显卡型号 lspci | grep -i vga#----output------ 01:00.0 VGA compatible controller: NVIDIA Corporation Device 1f06 (rev a1)根据 Device 后的 值 进入网站查询 pci-ids.ucw.cz/mods/PC/10de?actionhelp?helppci #根据显卡型号,下载对应系统的驱动…...
Java通过Excel批量上传数据!!!
一、首先在前端写一个上传功能。 <template><!-- 文件上传 --><el-upload class"upload-demo" drag action"" :on-change"onChange" :auto-upload"false"><el-icon class"el-icon--upload"><up…...

【PyQT/Pysider】控件背景渐变
默认渐变配色说明 background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(255, 178, 102, 255), stop:0.55 rgba(235, 148, 61, 255), stop:0.98 rgba(0, 0, 0, 255), stop:1 rgba(0, 0, 0, 0));这段样式表使用了qlineargradient函数来创建…...
ChatGPT-4 VS 文心一言4.0
在线体验 地址(含 gpt 3.5 / 4.0,文心 3.5 / 4.0):https://chat.tool4j.com 点击访问 文心一言和ChatGPT-4都是非常强大的自然语言处理模型,它们都能够在对话系统和其他NLP应用中发挥巨大的作用。然而,它们…...
MYSQL------从概述到DQL
数据库(数据管理,数据存储的仓库) 数据库管理系统(操纵和管理数据库的大型软件) SQL是操作关系型的编程语言,是一套标准 MySQL下载安装完成以后,可以进行启动和停止操作,对于启动和停…...
MATLAB算法实战应用案例精讲-【图像处理】图像识别(基础篇)(二)
目录 数字图像处理基本知识 传统图像处理方法进行瑕疵检测 传统算法方向的选择...

Leetcode 3.12
leetcode hot 100 链表1.两两交换链表中的节点2.随机链表的复制3.排序链表 链表 1.两两交换链表中的节点 两两交换链表中的节点 1.必须要设置一个dummy (temp) 结点2.保存第二个节点3.先让第一个节点指向第三个节点4.再让第二个节点指向第一个节点5.最后让dummy指向第二个节点…...
【天池课堂】零基础入门数据挖掘-课程汇总
写在前面: 如果你现在很迷茫,但是又对数据挖掘感兴趣,建议先看看以下两个视频直播,两位大佬亲身讲述自己和数据挖掘的前世今生。 《如何入门数据挖掘竞赛》 鱼遇雨欲语与余。天池明星选手,武汉大学硕士,天…...

表单进阶(3)-上传文件和隐藏字段
上传文件:<input type"file"> 隐藏字段:<input type"hidden" name"" id"" value"带给后端的信息"> 禁用disabled:<button disabled"disabled">注册</bu…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...