C15. 圧縮を有効にする
cpp-httplibは送信時の圧縮と受信時の解凍をサポートしています。ただし、zlibまたはBrotliを有効にしてビルドしておく必要があります。
ビルド時の準備
圧縮機能を使うには、httplib.hをインクルードする前に次のマクロを定義しておきます。
#define CPPHTTPLIB_ZLIB_SUPPORT // gzip / deflate #define CPPHTTPLIB_BROTLI_SUPPORT // brotli #include <httplib.h>
#define CPPHTTPLIB_ZLIB_SUPPORT // gzip / deflate #define CPPHTTPLIB_BROTLI_SUPPORT // brotli #include <httplib.h>
リンク時にzlibやbrotliのライブラリも必要です。
リクエストボディを圧縮して送る
httplib::Client cli("https://api.example.com"); cli.set_compress(true); std::string big_payload = build_payload(); auto res = cli.Post("/api/data", big_payload, "application/json");
httplib::Client cli("https://api.example.com"); cli.set_compress(true); std::string big_payload = build_payload(); auto res = cli.Post("/api/data", big_payload, "application/json");
set_compress(true)を呼んでおくと、POSTやPUTのリクエストボディがgzipで圧縮されて送信されます。サーバー側が対応している必要があります。
レスポンスを解凍する
httplib::Client cli("https://api.example.com"); cli.set_decompress(true); // デフォルトで有効 auto res = cli.Get("/api/data"); std::cout << res->body << std::endl;
httplib::Client cli("https://api.example.com"); cli.set_decompress(true); // デフォルトで有効 auto res = cli.Get("/api/data"); std::cout << res->body << std::endl;
set_decompress(true)を呼ぶと、サーバーがContent-Encoding: gzipなどで圧縮したレスポンスを自動で解凍してくれます。res->bodyには解凍済みのデータが入ります。
デフォルトで有効なので、通常は何もしなくても解凍されます。あえて生の圧縮データを触りたいときだけset_decompress(false)にしましょう。
Warning:
CPPHTTPLIB_ZLIB_SUPPORTを定義せずにビルドすると、set_compress()やset_decompress()を呼んでも何も起こりません。マクロの定義を忘れていないか、最初に確認しましょう。