- 1. Everything curl
- 2. The cURL project
❱
- 2.1. How it started
- 2.2. The name
- 2.3. What does curl do?
- 2.4. Project communication
- 2.5. Mailing list etiquette
- 2.6. Mailing lists
- 2.7. Reporting bugs
- 2.8. Commercial support
- 2.9. Releases
- 2.10. Security
- 2.11. Trust
- 2.12. Code of Conduct
- 2.13. Development
- 2.14. The development team
- 2.15. Users of curl
- 2.16. Future
- 3. Network and protocols
❱
- 3.1. Networking simplified
- 3.2. Protocols
- 3.3. curl protocols
- 3.4. HTTP basics
- 4. Install curl and libcurl
❱
- 4.1. Linux
- 4.2. Windows
❱
- 4.2.1. MSYS2
- 4.2.2. vcpkg
- 4.3. macOS
- 4.4. Container
- 5. Source code
❱
- 5.1. Open Source
❱
- 5.1.1. License
- 5.1.2. Copyright
- 5.2. Code layout
- 5.3. Handling build options
- 5.4. Code style
- 5.5. Contributing
- 5.6. Reporting vulnerabilities
- 5.7. Website
- 6. Build curl and libcurl
❱
- 6.1. Autotools
- 6.2. CMake
- 6.3. Separate install
- 6.4. Windows
- 6.5. Dependencies
- 6.6. TLS libraries
❱
- 6.6.1. BoringSSL
- 7. Command line concepts
❱
- 7.1. Differences
- 7.2. Command line options
❱
- 7.2.1. Short options
- 7.2.2. Long options
- 7.2.3. Arguments to options
- 7.2.4. Negative options
- 7.3. Help
- 7.4. Options depend on version
- 7.5. URLs
❱
- 7.5.1. Scheme
- 7.5.2. Name and password
- 7.5.3. Host
- 7.5.4. Port number
- 7.5.5. Path
- 7.5.6. Query
- 7.5.7. FTP type
- 7.5.8. Fragment
- 7.5.9. Browsers
- 7.5.10. Many options and URLs
- 7.5.11. URL globbing
- 7.5.12. Reading URLs from a file
- 7.5.13. Connection reuse
- 7.5.14. Parallel transfers
- 7.5.15. trurl
- 7.6. Config file
- 7.7. Variables
❱
- 7.7.1. Assign variables
- 7.7.2. Expand variables
- 7.7.3. Environment variables
- 7.7.4. Expand --variable
- 7.7.5. Expand functions
- 7.8. Passwords
- 7.9. Progress meter
- 7.10. Version
- 7.11. Exit code
- 7.12. Copy as curl
- 8. Command line transfers
❱
- 8.1. Verbose
❱
- 8.1.1. Trace options
- 8.1.2. Write out
❱
- 8.1.2.1. Available --write-out variables
- 8.1.2.2. Time specifiers
- 8.2. Downloads
❱
- 8.2.1. What is downloading?
- 8.2.2. Storing downloads
- 8.2.3. Download to a file named by the URL
- 8.2.4. Use the target filename from the server
- 8.2.5. HTML and charsets
- 8.2.6. Shell redirects
- 8.2.7. Discard received data
- 8.2.8. Multiple downloads
- 8.2.9. My browser shows something else
- 8.2.10. Maximum filesize
- 8.2.11. Storing metadata in file system
- 8.2.12. Raw
- 8.2.13. Retry
- 8.2.14. Resuming and ranges
- 8.3. Uploads
- 8.4. Transfer controls
❱
- 8.4.1. Stop slow transfers
- 8.4.2. Rate limiting
- 8.4.3. Request rate limiting
- 8.4.4. Compression
- 8.4.5. Skip download if already done
- 8.5. Connections
❱
- 8.5.1. Setup
- 8.5.2. Name resolve tricks
- 8.5.3. Connection timeout
- 8.5.4. Happy Eyeballs
- 8.5.5. Network interface
- 8.5.6. Local port number
- 8.5.7. Keep alive
- 8.6. Timeouts
- 8.7. .netrc
- 8.8. Proxies
❱
- 8.8.1. Discover your proxy
- 8.8.2. PAC
- 8.8.3. Captive portals
- 8.8.4. Proxy type
- 8.8.5. HTTP proxy
- 8.8.6. SOCKS proxy
- 8.8.7. MITM proxy
- 8.8.8. Proxy authentication
- 8.8.9. HTTPS proxy
- 8.8.10. Proxy environment variables
- 8.8.11. Proxy headers
- 8.8.12. haproxy
- 8.9. TLS
❱
- 8.9.1. Ciphers
- 8.9.2. Enable TLS
- 8.9.3. TLS versions
- 8.9.4. Verifying server certificates
- 8.9.5. Certificate pinning
- 8.9.6. OCSP stapling
- 8.9.7. Client certificates
- 8.9.8. TLS auth
- 8.9.9. TLS backends
- 8.9.10. SSLKEYLOGFILE
- 8.9.11. ECH
- 8.9.12. Built-in certificate store
- 8.9.13. TLS sessions and early data
- 8.9.14. Post-quantum
- 8.10. SCP and SFTP
❱
- 8.10.1. URLs
- 8.10.2. Authentication
- 8.10.3. Known hosts
- 8.10.4. Public key verification
- 8.11. DICT
- 8.12. IMAP
- 8.13. IPFS
- 8.14. MQTT
- 8.15. POP3
- 8.16. SMTP
- 8.17. TELNET
- 8.18. TFTP
- 9. Command line HTTP
❱
- 9.1. Method
- 9.2. Responses
- 9.3. Authentication
- 9.4. HTTP versions
❱
- 9.4.1. HTTP/0.9
- 9.4.2. HTTP/2
- 9.4.3. HTTP/3
- 9.5. HTTP POST
❱
- 9.5.1. Simple POST
- 9.5.2. Content-Type
- 9.5.3. Posting binary
- 9.5.4. JSON
- 9.5.5. URL encode data
- 9.5.6. Convert to GET
- 9.5.7. Expect 100-continue
- 9.5.8. Chunked encoded POSTs
- 9.5.9. Hidden form fields
- 9.5.10. Figure out what a browser sends
- 9.5.11. JavaScript and forms
- 9.5.12. Multipart formposts
- 9.5.13. -d vs -F
- 9.6. HTTP PUT
- 9.7. Redirects
- 9.8. Customize your HTTP
❱
- 9.8.1. Request method
- 9.8.2. Request target
- 9.8.3. Fragment
- 9.8.4. Customize headers
- 9.8.5. Referer
- 9.8.6. User-agent
- 9.8.7. Ranges
- 9.8.8. Conditionals
- 9.8.9. Compression
- 9.9. Cookies
❱
- 9.9.1. Cookie engine
- 9.9.2. Reading cookies from file
- 9.9.3. Writing cookies to file
- 9.9.4. New cookie session
- 9.9.5. Cookie file format
- 9.10. HTTPS
❱
- 9.10.1. HSTS
- 9.10.2. Alternative Services
- 9.11. Scripting browser-like tasks
- 10. Command line FTP
❱
- 10.1. FTP Directory listing
- 10.2. Uploading with FTP
- 10.3. Custom FTP commands
- 10.4. Two connections
- 10.5. Directory traversing
- 10.6. FTPS
- 11. libcurl
❱
- 11.1. Header files
- 11.2. Global initialization
- 11.3. API compatibility
- 11.4. --libcurl
- 11.5. multi-threading
- 11.6. CURLcode return codes
- 11.7. Verbose operations
- 11.8. Caches
- 11.9. Performance
- 11.10. for C++ programmers
- 12. libcurl transfers
❱
- 12.1. Easy handle
- 12.2. curl easy options
❱
- 12.2.1. Set numerical options
- 12.2.2. Set string options
- 12.2.3. TLS options
- 12.2.4. All options
- 12.2.5. Get option information
- 12.3. Drive transfers
❱
- 12.3.1. Drive with easy
- 12.3.2. Drive with multi
- 12.3.3. Drive with multi_socket
- 12.4. Callbacks
❱
- 12.4.1. Write data
- 12.4.2. Read data
- 12.4.3. Progress information
- 12.4.4. Header data
- 12.4.5. Debug
- 12.4.6. sockopt
- 12.4.7. SSL context
- 12.4.8. Seek and ioctl
- 12.4.9. Network data conversion
- 12.4.10. Opensocket and closesocket
- 12.4.11. SSH key
- 12.4.12. RTSP interleaved data
- 12.4.13. FTP wildcard matching
- 12.4.14. Resolver start
- 12.4.15. Sending trailers
- 12.4.16. HSTS
- 12.4.17. Prereq
- 12.5. Connection control
❱
- 12.5.1. How libcurl connects
- 12.5.2. Local address and port number
- 12.5.3. Connection reuse
- 12.5.4. Keep alive
- 12.5.5. Name resolving
- 12.5.6. Proxies
- 12.6. Transfer control
❱
- 12.6.1. Stop
- 12.6.2. Stop slow transfers
- 12.6.3. Rate limit
- 12.6.4. Progress meter
- 12.6.5. Progress callback
- 12.7. Authentication
- 12.8. Cleanup
- 12.9. Post transfer info
- 13. libcurl HTTP
❱
- 13.1. Responses
- 13.2. Requests
- 13.3. Versions
- 13.4. Ranges
- 13.5. Authentication
- 13.6. Cookies
- 13.7. Download
- 13.8. Upload
- 13.9. Multiplexing
- 13.10. HSTS
- 13.11. alt-svc
- 14. libcurl WebSocket
❱
- 14.1. Support
- 14.2. URLs
- 14.3. Concept
- 14.4. Options
- 14.5. Read
- 14.6. Meta
- 14.7. Write
- 15. libcurl share API
❱
- 15.1. Multi handle
- 15.2. Sharing between easy handles
- 15.3. What to share
- 15.4. Locking
- 15.5. Unshare
- 16. libcurl URL API
❱
- 16.1. Include files
- 16.2. Create
- 16.3. Cleanup
- 16.4. Duplicate
- 16.5. Parse a URL
- 16.6. Redirect to URL
- 16.7. Get a URL
- 16.8. Get URL parts
- 16.9. Set URL parts
- 16.10. Append to the query
- 16.11. CURLOPT_CURLU
- 17. libcurl headers API
❱
- 17.1. Header struct
- 17.2. Get a header
- 17.3. Iterate over headers
- 18. libcurl examples
❱
- 18.1. Get a simple HTTP page
- 18.2. Get a response into memory
- 18.3. Submit a login form over HTTP
- 18.4. Get an FTP directory listing
- 18.5. Non-blocking HTTP form-post
- 18.6. WebSocket with CONNECT_ONLY
- 18.7. WebSocket using callback
- 19. libcurl bindings
- 20. libcurl internals
❱
- 20.1. Easy handles and connections
- 20.2. Everything is multi
- 20.3. State machines
- 20.4. Protocol handler
- 20.5. Backends
- 20.6. Caches and state
- 20.7. Timeouts
- 20.8. Windows vs Unix
- 20.9. Memory debugging
- 20.10. Content Encoding
- 20.11. Structs
- 20.12. Resolving hostnames
- 20.13. Tests
❱
- 20.13.1. Test file format
- 20.13.2. Build tests
- 20.13.3. Run tests
- 20.13.4. Debug builds
- 20.13.5. Test servers
- 20.13.6. curl tests
- 20.13.7. libcurl tests
- 20.13.8. Unit tests
- 20.13.9. Valgrind
- 20.13.10. Continuous Integration
- 20.13.11. Autobuilds
- 20.13.12. Torture
- 21. Index