mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-10-19 11:19:36 +00:00
Bring the READMEs and the docs pages (en and ja) in line with the current header: - Fix the client sample that does not compile, the Transfer-Encoding statement for default headers, the verifier callback comment, the thread pool spawn rule, the sanitize_filename description, and the inverted Accept-Encoding sentence. - Describe recent behaviour: TLS errors behind Read/Write failures, Host validation, Connection: close for a body without length, content_reader rules, refused CONNECT, WebSocketClient proxies, CPPHTTPLIB_INTERIM_RESPONSE_MAX_COUNT, the SSE event size limit, and the payload limit of the Stream API. - Complete the API references of WebSocket, WebSocketClient and the stream:: helpers, and the SSE reconnect rules. - Fix cookbook pages: keychain loading on every backend, received Close status, a multipart sample that trusted the client's file name, an echo sample that sent binary as text, SNI, pre-request handler scope, stop() with WebSocket handlers, and the thread pool notes. - Restore the mutex in the LLM app's Chapter 5 code.
49 lines
1.8 KiB
Markdown
49 lines
1.8 KiB
Markdown
---
|
|
title: "C15. Enable Compression"
|
|
order: 15
|
|
status: "draft"
|
|
---
|
|
|
|
cpp-httplib supports compression when sending and decompression when receiving. You just need to build it with zlib, Brotli, or Zstd enabled.
|
|
|
|
## Build-time setup
|
|
|
|
To use compression, define these macros before including `httplib.h`:
|
|
|
|
```cpp
|
|
#define CPPHTTPLIB_ZLIB_SUPPORT // gzip / deflate
|
|
#define CPPHTTPLIB_BROTLI_SUPPORT // brotli
|
|
#define CPPHTTPLIB_ZSTD_SUPPORT // zstd
|
|
#include <httplib.h>
|
|
```
|
|
|
|
You'll also need to link against `zlib`, `brotli`, or `zstd`, whichever you enabled.
|
|
|
|
## Compress the request body
|
|
|
|
```cpp
|
|
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");
|
|
```
|
|
|
|
With `set_compress(true)`, the body of POST, PUT, or PATCH requests is compressed before sending. The encoding is the first one enabled in your build, in the order Brotli, gzip, Zstd. The server needs to handle compressed bodies too.
|
|
|
|
## Decompress the response
|
|
|
|
```cpp
|
|
httplib::Client cli("https://api.example.com");
|
|
cli.set_decompress(true); // on by default
|
|
|
|
auto res = cli.Get("/api/data");
|
|
std::cout << res->body << std::endl;
|
|
```
|
|
|
|
With `set_decompress(true)`, the client automatically decompresses responses that arrive with `Content-Encoding: gzip` or similar. `res->body` contains the decompressed data.
|
|
|
|
It's on by default, so normally you don't need to do anything. Set it to `false` only if you want the raw compressed bytes.
|
|
|
|
> **Warning:** If you build without any compression library, `set_compress(true)` leaves the request uncompressed. And a response compressed with an encoding your build lacks makes the request fail with `Error::UnsupportedContentEncoding`. If compression isn't working, check the macro definitions first.
|