Files
cpp-httplib/docs-src/pages/ja/cookbook/c15-compression.md
2026-04-10 18:16:02 -04:00

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>

リンク時にzlibbrotliのライブラリも必要です。

リクエストボディを圧縮して送る

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()を呼んでも何も起こりません。マクロの定義を忘れていないか、最初に確認しましょう。