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替換為設備對應的平台架構即可。

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

推薦

直接下載 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);
}
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。