当前位置: 首页 > news >正文

基于C++的http通信记录,使用httplib,Windows环境,vscode,mingw

使用了 httplib库,链接,使用该库只需要包含头文件即可,另外在Windows环境下,使用mingw构建项目,需要在编译时链接网络编程库,task.json如下:

{"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C++: g++.exe 生成活动文件","command": "D:\\xxx\\mingw64\\mingw64\\bin\\g++.exe","args": ["-fdiagnostics-color=always","--std=c++17",//确保std::filesystem可以使用"-g","${workspaceFolder}\\src\\*.cpp","-I","${workspaceFolder}\\include","-o","${fileDirname}\\${fileBasenameNoExtension}.exe","-lstdc++fs",//确保std::filesystem可以使用"-lwsock32",//网络编程库"-lws2_32"//这两个都是],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "编译器: \"D:\\xxx\\mingw64\\mingw64\\bin\\g++.exe\""}]
}

网上看到了很多好用的http调试工具,比如一款开源免费的 postwoman ,但是我想测试自己的程序中post的数据目标有没有收到,没有在postwoman中找到监听功能,后来发现了一个有echo功能的测试接口 http://httpbin.org/post,可以原样返回向他发送的请求头以及参数等,下面是一个简单的测试样例:

#include<iostream>
#include <httplib.h>
#include "nlohmann/json.hpp"//json库,也即包含头文件就可用using namespace std;int main() {httplib::Client client("httpbin.org", 80);httplib::Params params;params.emplace("name", "john");params.emplace("note", "coder");// 发起 HTTP POST 请求到指定路径 "/post"auto res = client.Post("/post", params);// 检查请求是否成功if (res && res->status == 200) {// 打印响应体std::cout << res->body << std::endl;// 可以进一步处理响应的内容,例如解析为 JSON} else {// 处理请求失败的情况auto err = res.error();std::cerr << "错误:" << err << std::endl;}return 0;
}

输出:

{"args": {},"data": "","files": {},"form": {"name": "john","note": "coder"},"headers": {"Accept": "*/*","Content-Length": "20","Content-Type": "application/x-www-form-urlencoded","Host": "httpbin.org","User-Agent": "cpp-httplib/0.14.3","X-Amzn-Trace-Id": "Root=1-65dfdb62-62b001d33ee6f2193119e45c"},"json": null,"origin": "211.64.159.21","url": "http://httpbin.org/post"
}

几个很好的博主分享:
HTTP中POST提交数据的四种方式详解
nlohmann入门使用总结
httplib库的使用(支持http/https)(一)
原来C++调用HTTP API接口也能这么优雅

相关文章:

  • Quartz 任务调度框架源码阅读解析
  • 【K8s】初识PV和PVC
  • 【BUG 记录】MyBatis-Plus 处理枚举字段和 JSON 字段
  • 基于YOLOv8深度学习的复杂场景下船舶目标检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测
  • 云端技术驾驭DAY15——ClusterIP服务、Ingress服务、Dashboard插件、k8s角色的认证与授权
  • hive中常见参数优化总结
  • 【LeetCode-简单】27.移除元素 - 数组与双指针法
  • 五种查看Spring容器中bean的方法
  • 面向对象编程入门:掌握C++类的基础(2/3):深入理解C++中的类成员函数
  • 防御保护课程笔记
  • 【小白学机器学习5】偏差bias, 方差,var 误差error, MSE, RMSE,MAE, MAPE, WMAPE
  • 【Python笔记-设计模式】状态模式
  • 在极狐GitLab 配置 SSL/https
  • oracle DG 原理
  • 一张照片一键换脸:无需数据集和训练 | 开源日报 No.186
  • chrome扩展demo1-小时钟
  • co.js - 让异步代码同步化
  • docker容器内的网络抓包
  • Elasticsearch 参考指南(升级前重新索引)
  • Java的Interrupt与线程中断
  • java第三方包学习之lombok
  • Java面向对象及其三大特征
  • Odoo domain写法及运用
  • Protobuf3语言指南
  • Python 反序列化安全问题(二)
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • SQLServer插入数据
  • vue.js框架原理浅析
  • 闭包,sync使用细节
  • 电商搜索引擎的架构设计和性能优化
  • 将 Measurements 和 Units 应用到物理学
  • 排序算法学习笔记
  • 前端面试题总结
  • 区块链共识机制优缺点对比都是什么
  • 使用 Docker 部署 Spring Boot项目
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 小程序开发中的那些坑
  • 正则表达式小结
  • 如何用纯 CSS 创作一个货车 loader
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (多级缓存)多级缓存
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一) springboot详细介绍
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (轉貼) UML中文FAQ (OO) (UML)
  • .FileZilla的使用和主动模式被动模式介绍
  • .net 7 上传文件踩坑
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • /var/spool/postfix/maildrop 下有大量文件
  • @JoinTable会自动删除关联表的数据