index.md 3.2 KB


title: "Cookbook" order: 0

status: "draft"

A collection of recipes that answer "How do I...?" questions. Each recipe is self-contained — read only what you need.

Client

Basics

  • Get the response body as a string / save to a file
  • Send and receive JSON
  • Set default headers (set_default_headers)
  • Follow redirects (set_follow_location)

Authentication

  • Use Basic authentication (set_basic_auth)
  • Call an API with a Bearer token

File Upload

  • Upload a file as multipart form data (make_file_provider)
  • POST a file as raw binary (make_file_body)
  • Send the body with chunked transfer (Content Provider)

Streaming & Progress

  • Receive a response as a stream
  • Use the progress callback (DownloadProgress / UploadProgress)

Connection & Performance

  • Set timeouts (set_connection_timeout / set_read_timeout)
  • Set an overall timeout (set_max_timeout)
  • Understand connection reuse and Keep-Alive behavior
  • Enable compression (set_compress / set_decompress)
  • Send requests through a proxy (set_proxy)

Error Handling & Debugging

  • Handle error codes (Result::error())
  • Handle SSL errors (ssl_error() / ssl_backend_error())
  • Set up client logging (set_logger / set_error_logger)

Server

Basics

  • Register GET / POST / PUT / DELETE handlers
  • Receive JSON requests and return JSON responses
  • Use path parameters (/users/:id)
  • Set up a static file server (set_mount_point)

Streaming & Files

  • Stream a large file in the response (ContentProvider)
  • Return a file download response (Content-Disposition)
  • Receive multipart data as a stream (ContentReader)
  • Compress responses (gzip)

Handler Chain

  • Add pre-processing to all routes (Pre-routing handler)
  • Add response headers with a Post-routing handler (CORS, etc.)
  • Authenticate per route with a Pre-request handler (matched_route)
  • Pass data between handlers with res.user_data

Error Handling & Debugging

  • Return custom error pages (set_error_handler)
  • Catch exceptions (set_exception_handler)
  • Log requests (Logger)
  • Detect client disconnection (req.is_connection_closed())

Operations & Tuning

  • Assign a port dynamically (bind_to_any_port)
  • Control startup order with listen_after_bind
  • Shut down gracefully (stop() and signal handling)
  • Tune Keep-Alive (set_keep_alive_max_count / set_keep_alive_timeout)
  • Configure the thread pool (new_task_queue)

TLS / Security

  • Choosing between OpenSSL, mbedTLS, and wolfSSL (build-time #define differences)
  • Control SSL certificate verification (disable, custom CA, custom callback)
  • Use a custom certificate verification callback (set_server_certificate_verifier)
  • Set up an SSL/TLS server (certificate and private key)
  • Configure mTLS (mutual TLS with client certificates)
  • Access the peer certificate on the server (req.peer_cert() / SNI)

SSE

  • Implement an SSE server
  • Use event names to distinguish event types
  • Handle reconnection (Last-Event-ID)
  • Receive SSE events on the client

WebSocket

  • Implement a WebSocket echo server and client
  • Configure heartbeats (set_websocket_ping_interval / CPPHTTPLIB_WEBSOCKET_PING_INTERVAL_SECOND)
  • Handle connection close
  • Send and receive binary frames