banner
Cypress

Cypress

twitter
telegram
github
discord server

cpp-httplib库的简单使用

Cpp-httplib 简介#

cpp-httplib 是一个 c++ 实现的单个头文件的 http 库,接触到这个库的缘由呐,是因为最近我们团队的 AI 项目需要将结果从端侧设备上传到后台,为了能更好的与端侧 AI 结合,所以想采用 c++ 完成这项工作。项目地址

集成 cpp-httplib#

方式一、通过 vcpkg 安装#

这个需要先安装 vcpkg,这里就不多做介绍了。
安装完 vcpkg 之后通过以下命令即可安装 cpp-httplib

vcpkg install cpp-httplib:arm64-linux

安装时将arm64-linux替换为设备对应的平台架构即可。

方式二、直接集成头文件#

Recommend

直接下载 httplib.h 文件到本地,放到你需要的项目当中即可。

client 使用示例#

client 构造#

httplib::Client cli("localhost");
httplib::Client cli("localhost:8080");
httplib::Client cli("http://localhost");
httplib::Client cli("http://localhost:8080");
httplib::Client cli("https://localhost");
httplib::SSLClient cli("localhost");

无参 Get 请求#

#include "httplib.h"
#include <iostream>

int main(void)
{
  httplib::Client cli("localhost", 1234);

  if (auto res = cli.Get("/hi")) {
    if (res->status == 200) {
      std::cout << res->body << std::endl;
    }
  } else {
    auto err = res.error();
    std::cout << "HTTP error: " << httplib::to_string(err) << std::endl;
  }
}

cpp-httplib 将响应体(res->body)封装为 std::string类型,如果想要更方便的操作其中的值,可以考虑使用 json 库对其解析。

带 header 的 Get 请求#

httplib::Headers headers = {
  { "Accept-Encoding", "gzip, deflate" }
};
auto res = cli.Get("/hi", headers);

or

cli.set_default_headers({
  { "X-Access-Token", token }
});
auto res = cli.Get("/getUserList");

带 params 的 Get 请求#

std::stringstream ss;
ss << GetMillitimestamp();
std::string tStr = ss.str();
std::string sign = calculateSignature(appKey, appSecret, tStr);
httplib::Result res = cli.Get("/getToken?appKey=" + appKey + "&sign=" + sign + "&timestamp=" + tStr);

这是能满足我需求的最简单的编写方式,当然它还提供了很多可以携带 parameter 的 API。

inline Result Client::Get(const std::string &path, const Params &params,
                          const Headers &headers, Progress progress) {
  return cli_->Get(path, params, headers, progress);
}
inline Result Client::Get(const std::string &path, const Params &params,
                          const Headers &headers,
                          ContentReceiver content_receiver, Progress progress) {
  return cli_->Get(path, params, headers, content_receiver, progress);
}
inline Result Client::Get(const std::string &path, const Params &params,
                          const Headers &headers,
                          ResponseHandler response_handler,
                          ContentReceiver content_receiver, Progress progress) {
  return cli_->Get(path, params, headers, response_handler, content_receiver,
                   progress);
}

不知为何作者没有提供一个简单的携带 parameter 的 API,就像这样:

inline Result Client::Get(const std::string &path, const Params &params) {
  return cli_->Get(path, params);
}
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。