原来C++调用HTTP API接口也能这么优雅
动机
在开发C++程序时,难免会遇到与其他语言/系统对接的情况。百度谷歌搜了一下,发现star最高的cpp-httplib。试了一下,真香!关键这个库还是header only 引用的,这个超级Nice!!从此以后再也不担心跨语言对接了(手动滑稽)。 本文仅作抛砖引玉~
一:cpp-httplib简介
一个header-only且跨平台的C++ HTTP/HTTPS库
只需将***httplib.h***包含到你的工程中即可完成配置(header-only)
注意:此库在多线程下会阻塞运行,暂不支持非阻塞运行
跨平台!!! 这个很重要,我经常在Windows和Linux来回换着编程
此库既支持用C++编写客户端访问HTTP服务器, 也支持用于编写C++服务端。由于本人实际工作用很少用C++编写服务端,所以就不在这里介(误)绍(导)了。
二:主要用法
-
工程引用
//只需包含头文件即可 #include "path/to/httplib.h"
-
发送POST请求
-
先介绍几个重要的构造函数
//无参调用POST接口 httplib::Result Client::Post(const char *path); //带参数调用POST接口, 参数一般是Json形式的 httplib::Result Client::Post(const char *path, const Params ¶ms); //带Header、参数调用POST接口 httplib::Result Client::Post(const char *path, const Headers &headers,const Params ¶ms); //不带Header、表单参数调用POST接口 httplib::Result Client::Post(const char *path, const MultipartFormDataItems &items); //带Header、表单参数调用Post参数 httplib::Result Client::Post(const char *path, const Headers &headers, const MultipartFormDataItems &items);
-
调用格式
#include <httplib.h> #include <iostream> int main(void) { httplib::Client cli("localhost", 1234); httplib::Params params; params.emplace("name", "john"); params.emplace("note", "coder"); if (auto res = cli.Post("/post", params);) { if (res->status == 200) { std::cout << res->body << std::endl; //返回的结果可使用json对象建模,推荐看上一篇文章 } } else { auto err = res.error(); ... } }
-
上面给出了带参数访问Post接口的示例,读者可根据自己需求改动~
-
-
发送Get请求
-
几个重要的构造函数
//无参调用Get接口 httplib::Result Client::Get(const char *path); //带Header调用Get接口 httplib:: Result Client::Get(const char *path, const Headers &headers); //使用ContentReceiver接受数据 std::string body; auto res = cli.Get("/large-data", [&](const char *data, size_t data_length) { body.append(data, data_length); return true; });
-
调用格式参考Post
-
-
其他的HTTP方法
//PUT res = cli.Put("/resource/foo", "text", "text/plain"); //DELETE res = cli.Delete("/resource/foo");
三:注意事项
-
此库支持g++4.8及下不受支持
-
在Windows下,如果要包含windows.h, 则应httplib.h包含在Windows.h之前; 否则就要添加相关的宏定义
//注意:WIN8及更老的系统不支持。话说现在新开发的程序基本都在WIN10了吧。。。。。 #include <httplib.h> #include <Windows.h> //或者 #define WIN32_LEAN_AND_MEAN #include <Windows.h> #include <httplib.h>
欢迎大家点赞评论加转发, 各位同学的点赞评论加转发是我持续写作输出的动力,不知之处也欢迎大家批评指正
感兴趣的小伙伴可以关注一下我个人的微信公众号 兰亭汇,这个公众号主要用于分享个人成长经历~~