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…...
互联网创业者的AI助手:用Nanbeige 4.1-3B快速生成产品文案与市场分析
互联网创业者的AI助手:用Nanbeige 4.1-3B快速生成产品文案与市场分析 你是不是也遇到过这种情况?产品功能已经开发得七七八八,但产品介绍文档还是一片空白;明天就要发新品预热微博,文案却憋了一下午只写出个标题&…...
写程序茶叶/咖啡包装日期密封标,易撕不损盒,输出:小众商家定制包装,提升质感。
项目方案:基于Python的激光易撕密封标牌生成系统一、 实际应用场景描述想象一下,你走进一家主打手冲咖啡或高端岩茶的精品买手店。他们售卖的是50g 装的挂耳咖啡包或散装岩茶罐。传统的解决方案是贴一张简陋的不干胶标签,写上日期,…...
G-Helper终极指南:5分钟快速掌握华硕笔记本高效控制
G-Helper终极指南:5分钟快速掌握华硕笔记本高效控制 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar…...
WarcraftHelper:面向魔兽争霸III玩家的全方位优化解决方案
WarcraftHelper:面向魔兽争霸III玩家的全方位优化解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一款专为魔兽争…...
告别复杂配置!CogVideoX-2b一键部署,小白也能当AI视频导演
告别复杂配置!CogVideoX-2b一键部署,小白也能当AI视频导演 1. 开箱即用的视频创作革命 想象一下,你只需要输入一段文字描述,就能自动生成一段高质量的视频内容。这不再是科幻电影中的场景,而是CogVideoX-2b CSDN专用…...
会员源码网:站长必备的一站式源码解决方案
作为站长或开发者,你是否经常为寻找合适的源码而烦恼?要么资源老旧难以适配新环境,要么免费源码暗藏后门和广告,要么付费源码价格高昂却效果不佳。在众多源码平台中,会员源码网 凭借其独特的会员制模式和优质资源&am…...
从插件安装到项目配置:在Cursor里用CMake和.vscode文件夹搞定C++开发环境
从插件安装到项目配置:在Cursor里用CMake和.vscode文件夹搞定C开发环境 如果你已经厌倦了每次新建C项目都要重新配置开发环境的繁琐流程,这篇文章将带你彻底告别这种低效状态。作为一款新兴的智能代码编辑器,Cursor凭借其出色的AI辅助功能和轻…...
Qwen3-VL-2B场景应用:电商识图、教育答题、办公文档处理实战
Qwen3-VL-2B场景应用:电商识图、教育答题、办公文档处理实战 1. 项目概述 Qwen3-VL-2B-Instruct是一款基于视觉语言模型(Vision-Language Model)的多模态AI服务,能够同时处理图像和文本输入,实现复杂的图文交互功能。该模型针对CPU环境进行…...
Django UI扩展全攻略:打造炫酷管理界面,【面试】Kafka / RabbitMQ / ActiveMQ。
Django第三方扩展UI详解:打造现代化管理界面和用户界面 核心UI扩展库介绍 Django-admin-interface 提供高度可定制的管理后台界面,支持主题切换、颜色自定义和模块拖拽布局。无需修改Django原生代码即可实现视觉升级,适合快速构建品牌化管理系…...
费马小定理,快速幂
今天显示延续了昨天的背包问题,先是写了一题背包问题,后面就写费马定理加快速幂。费马小定理证明如果一个数p是质数,并且a不是p的倍数,那么一定有a^(p-1)1(mod p);那么自然有a^(p-2)a^-1(mod p)…...
