mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-04-12 11:48:30 +00:00
1.9 KiB
1.9 KiB
title, order, status
| title | order | status |
|---|---|---|
| C15. 圧縮を有効にする | 15 | draft |
cpp-httplibは送信時の圧縮と受信時の解凍をサポートしています。ただし、zlibまたはBrotliを有効にしてビルドしておく必要があります。
ビルド時の準備
圧縮機能を使うには、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");
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;
set_decompress(true)を呼ぶと、サーバーがContent-Encoding: gzipなどで圧縮したレスポンスを自動で解凍してくれます。res->bodyには解凍済みのデータが入ります。
デフォルトで有効なので、通常は何もしなくても解凍されます。あえて生の圧縮データを触りたいときだけset_decompress(false)にしましょう。
Warning:
CPPHTTPLIB_ZLIB_SUPPORTを定義せずにビルドすると、set_compress()やset_decompress()を呼んでも何も起こりません。マクロの定義を忘れていないか、最初に確認しましょう。