banner
Cypress

Cypress

twitter
telegram
github
discord server

cpp-httplibライブラリの簡単な使用

Cpp-httplib の概要#

cpp-httplib は、C++ で実装された単一のヘッダーファイルの HTTP ライブラリです。このライブラリに触れたきっかけは、最近私たちのチームの AI プロジェクトで、結果をエンドデバイスからバックエンドにアップロードする必要があったためです。エンドデバイスの AI との統合をより良くするために、この作業を C++ で行うことにしました。プロジェクトのリンク

cpp-httplib の統合方法#

方法 1: vcpkg を使用してインストールする#

まず、vcpkg をインストールする必要がありますが、ここでは詳細な説明は省略します。
vcpkg をインストールした後、以下のコマンドを使用して cpp-httplib をインストールできます。

vcpkg install cpp-httplib:arm64-linux

インストールする際にarm64-linuxをデバイスの対応するプラットフォームアーキテクチャに置き換えてください。

方法 2: ヘッダーファイルを直接統合する#

推奨

httplib.h ファイルを直接ダウンロードし、必要なプロジェクトに配置してください。

クライアントの使用例#

クライアントの作成#

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 ライブラリを使用することを検討してください。

ヘッダー付きの GET リクエスト#

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

または

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

パラメータ付きの 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);

これは私の要件を満たすための最もシンプルな書き方ですが、他にもパラメータを持つ 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);
}

なぜ作者が単純なパラメータを持つ API を提供していないのかはわかりませんが、次のように提供しているべきです:

inline Result Client::Get(const std::string &path, const Params &params) {
  return cli_->Get(path, params);
}
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。