基于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接口也能这么优雅

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 C++httplib 库创建一个在线程中运行的 HTTP 服务可以按照以下步骤进行: 1. 首先,需要创建一个线程,在该线程中启动 HTTP 服务。可以使用 C++ 的 `<thread>` 头文件来创建线程。例如,可以定义以下函数作为线程函数: ```cpp void start_server() { // 在此处启动 HTTP 服务 } ``` 2. 然后,在 `start_server` 函数中,使用 httplib 库创建 HTTP 服务。以下是一个简单的示例: ```cpp void start_server() { httplib::Server svr; svr.Get("/", [](const httplib::Request& req, httplib::Response& res) { res.set_content("Hello World!", "text/plain"); }); svr.listen("localhost", 8080); } ``` 此示例创建了一个简单的 HTTP 服务,该服务将在根路径上返回“Hello World!”文本。服务器将在本地主机上的端口 8080 上侦听。 3. 最后,在主线程中创建一个新线程,并将 `start_server` 函数作为线程函数传递给它。例如: ```cpp #include <thread> int main() { std::thread server_thread(start_server); server_thread.join(); return 0; } ``` 此代码将创建一个名为 `server_thread` 的新线程,并在其中运行 `start_server` 函数。然后,主线程将等待 `server_thread` 完成(即,等待 HTTP 服务停止)。 注意:在使用 httplib 库时,要确保服务器对象(例如,上面示例中的 `svr`)在其所在的线程上下文中创建和使用。如果将服务器对象从一个线程传递到另一个线程,可能会导致未定义的行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值