|
动机
在开发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接口
httplib::Result Client::Post(const char *path);
//带参数调用POST接口, 参数一般是Json形式的
httplib::Result Client::Post(const char *path, const Params &params);
//带Header、参数调用POST接口
httplib::Result Client::Post(const char *path, const Headers &headers,const Params &params);
//不带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(&#34;localhost&#34;, 1234);
httplib::Params params;
params.emplace(&#34;name&#34;, &#34;john&#34;);
params.emplace(&#34;note&#34;, &#34;coder&#34;);
if (auto res = cli.Post(&#34;/post&#34;, params);)
{
if (res->status == 200)
{
std::cout << res->body << std::endl;
//返回的结果可使用json对象建模,推荐看上一篇文章
}
}
else
{
auto err = res.error();
...
}
}
上面给出了带参数访问Post接口的示例,读者可根据自己需求改动~
//无参调用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(&#34;/large-data&#34;,
[&](const char *data, size_t data_length) {
body.append(data, data_length);
return true;
}); 调用格式参考Post
//PUT
res = cli.Put(&#34;/resource/foo&#34;, &#34;text&#34;, &#34;text/plain&#34;);
//DELETE
res = cli.Delete(&#34;/resource/foo&#34;);三:注意事项
- 此库支持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>欢迎大家点赞评论加转发, 各位同学的点赞评论加转发是我持续写作输出的动力,不知之处也欢迎大家批评指正~
感兴趣的小伙伴可以关注一下我个人的微信公众号 兰亭汇,这个公众号主要用于分享个人成长经历~~ |
|