Files
cpp-httplib/docs-src/pages/en/cookbook/index.md
2026-04-10 18:16:02 -04:00

97 lines
3.5 KiB
Markdown

---
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. For an introduction to the basics, see the [Tour](../tour/).
## Client
### Basics
- [C01. Get the response body / save to a file](c01-get-response-body)
- [C02. Send and receive JSON](c02-json)
- [C03. Set default headers](c03-default-headers)
- [C04. Follow redirects](c04-follow-location)
### Authentication
- [C05. Use Basic authentication](c05-basic-auth)
- [C06. Call an API with a Bearer token](c06-bearer-token)
### File Upload
- [C07. Upload a file as multipart form data](c07-multipart-upload)
- [C08. POST a file as raw binary](c08-post-file-body)
- [C09. Send the body with chunked transfer](c09-chunked-upload)
### Streaming & Progress
- [C10. Receive a response as a stream](c10-stream-response)
- [C11. Use the progress callback](c11-progress-callback)
### Connection & Performance
- [C12. Set timeouts](c12-timeouts)
- [C13. Set an overall timeout](c13-max-timeout)
- [C14. Understand connection reuse and Keep-Alive behavior](c14-keep-alive)
- [C15. Enable compression](c15-compression)
- [C16. Send requests through a proxy](c16-proxy)
### Error Handling & Debugging
- [C17. Handle error codes](c17-error-codes)
- [C18. Handle SSL errors](c18-ssl-errors)
- [C19. Set up client logging](c19-client-logger)
## Server
### Basics
- S01. Register GET / POST / PUT / DELETE handlers
- S02. Receive JSON requests and return JSON responses
- S03. Use path parameters (`/users/:id`)
- S04. Set up a static file server (`set_mount_point`)
### Streaming & Files
- S05. Stream a large file in the response (`ContentProvider`)
- S06. Return a file download response (`Content-Disposition`)
- S07. Receive multipart data as a stream (`ContentReader`)
- S08. Compress responses (gzip)
### Handler Chain
- S09. Add pre-processing to all routes (Pre-routing handler)
- S10. Add response headers with a Post-routing handler (CORS, etc.)
- S11. Authenticate per route with a Pre-request handler (`matched_route`)
- S12. Pass data between handlers with `res.user_data`
### Error Handling & Debugging
- S13. Return custom error pages (`set_error_handler`)
- S14. Catch exceptions (`set_exception_handler`)
- S15. Log requests (Logger)
- S16. Detect client disconnection (`req.is_connection_closed()`)
### Operations & Tuning
- S17. Assign a port dynamically (`bind_to_any_port`)
- S18. Control startup order with `listen_after_bind`
- S19. Shut down gracefully (`stop()` and signal handling)
- S20. Tune Keep-Alive (`set_keep_alive_max_count` / `set_keep_alive_timeout`)
- S21. Configure the thread pool (`new_task_queue`)
- S22. Communicate over Unix domain sockets (`set_address_family(AF_UNIX)`)
## TLS / Security
- T01. Choosing between OpenSSL, mbedTLS, and wolfSSL (build-time `#define` differences)
- T02. Control SSL certificate verification (disable, custom CA, custom callback)
- T03. Set up an SSL/TLS server (certificate and private key)
- T04. Configure mTLS (mutual TLS with client certificates)
- T05. Access the peer certificate on the server (`req.peer_cert()` / SNI)
## SSE
- E01. Implement an SSE server
- E02. Use event names to distinguish event types
- E03. Handle reconnection (`Last-Event-ID`)
- E04. Receive SSE events on the client
## WebSocket
- W01. Implement a WebSocket echo server and client
- W02. Configure heartbeats (`set_websocket_ping_interval`)
- W03. Handle connection close
- W04. Send and receive binary frames