1. Everything curl
  2. The cURL project
    1. How it started
    2. The name
    3. What does curl do?
    4. Project communication
    5. Mailing list etiquette
    6. Mailing lists
    7. Reporting bugs
    8. Commercial support
    9. Releases
    10. Security
    11. Trust
    12. Code of Conduct
    13. Development
    14. The development team
    15. Users of curl
    16. Future
  3. Network and protocols
    1. Networking simplified
    2. Protocols
    3. curl protocols
    4. HTTP basics
  4. Install curl and libcurl
    1. Linux
    2. Windows
      1. MSYS2
      2. vcpkg
    3. macOS
    4. Container
  5. Source code
    1. Open Source
      1. License
      2. Copyright
    2. Code layout
    3. Handling build options
    4. Code style
    5. Contributing
    6. Reporting vulnerabilities
    7. Website
  6. Build curl and libcurl
    1. Autotools
    2. CMake
    3. Separate install
    4. Windows
    5. Dependencies
    6. TLS libraries
      1. BoringSSL
  7. Command line concepts
    1. Differences
    2. Command line options
      1. Short options
      2. Long options
      3. Arguments to options
      4. Negative options
    3. Help
    4. Options depend on version
    5. URLs
      1. Scheme
      2. Name and password
      3. Host
      4. Port number
      5. Path
      6. Query
      7. FTP type
      8. Fragment
      9. Browsers
      10. Many options and URLs
      11. URL globbing
      12. Reading URLs from a file
      13. Connection reuse
      14. Parallel transfers
      15. trurl
    6. Config file
    7. Variables
      1. Assign variables
      2. Expand variables
      3. Environment variables
      4. Expand --variable
      5. Expand functions
    8. Passwords
    9. Progress meter
    10. Version
    11. Exit code
    12. Copy as curl
  8. Command line transfers
    1. Verbose
      1. Trace options
      2. Write out
        1. Available --write-out variables
        2. Time specifiers
    2. Downloads
      1. What is downloading?
      2. Storing downloads
      3. Download to a file named by the URL
      4. Use the target filename from the server
      5. HTML and charsets
      6. Shell redirects
      7. Discard received data
      8. Multiple downloads
      9. My browser shows something else
      10. Maximum filesize
      11. Storing metadata in file system
      12. Raw
      13. Retry
      14. Resuming and ranges
    3. Uploads
    4. Transfer controls
      1. Stop slow transfers
      2. Rate limiting
      3. Request rate limiting
      4. Compression
      5. Skip download if already done
    5. Connections
      1. Setup
      2. Name resolve tricks
      3. Connection timeout
      4. Happy Eyeballs
      5. Network interface
      6. Local port number
      7. Keep alive
    6. Timeouts
    7. .netrc
    8. Proxies
      1. Discover your proxy
      2. PAC
      3. Captive portals
      4. Proxy type
      5. HTTP proxy
      6. SOCKS proxy
      7. MITM proxy
      8. Proxy authentication
      9. HTTPS proxy
      10. Proxy environment variables
      11. Proxy headers
      12. haproxy
    9. TLS
      1. Ciphers
      2. Enable TLS
      3. TLS versions
      4. Verifying server certificates
      5. Certificate pinning
      6. OCSP stapling
      7. Client certificates
      8. TLS auth
      9. TLS backends
      10. SSLKEYLOGFILE
      11. ECH
      12. Built-in certificate store
      13. TLS sessions and early data
      14. Post-quantum
    10. SCP and SFTP
      1. URLs
      2. Authentication
      3. Known hosts
      4. Public key verification
    11. DICT
    12. IMAP
    13. IPFS
    14. MQTT
    15. POP3
    16. SMTP
    17. TELNET
    18. TFTP
  9. Command line HTTP
    1. Method
    2. Responses
    3. Authentication
    4. HTTP versions
      1. HTTP/0.9
      2. HTTP/2
      3. HTTP/3
    5. HTTP POST
      1. Simple POST
      2. Content-Type
      3. Posting binary
      4. JSON
      5. URL encode data
      6. Convert to GET
      7. Expect 100-continue
      8. Chunked encoded POSTs
      9. Hidden form fields
      10. Figure out what a browser sends
      11. JavaScript and forms
      12. Multipart formposts
      13. -d vs -F
    6. HTTP PUT
    7. Redirects
    8. Customize your HTTP
      1. Request method
      2. Request target
      3. Fragment
      4. Customize headers
      5. Referer
      6. User-agent
      7. Ranges
      8. Conditionals
      9. Compression
    9. Cookies
      1. Cookie engine
      2. Reading cookies from file
      3. Writing cookies to file
      4. New cookie session
      5. Cookie file format
    10. HTTPS
      1. HSTS
      2. Alternative Services
    11. Scripting browser-like tasks
  10. Command line FTP
    1. FTP Directory listing
    2. Uploading with FTP
    3. Custom FTP commands
    4. Two connections
    5. Directory traversing
    6. FTPS
  11. libcurl
    1. Header files
    2. Global initialization
    3. API compatibility
    4. --libcurl
    5. multi-threading
    6. CURLcode return codes
    7. Verbose operations
    8. Caches
    9. Performance
    10. for C++ programmers
  12. libcurl transfers
    1. Easy handle
    2. curl easy options
      1. Set numerical options
      2. Set string options
      3. TLS options
      4. All options
      5. Get option information
    3. Drive transfers
      1. Drive with easy
      2. Drive with multi
      3. Drive with multi_socket
    4. Callbacks
      1. Write data
      2. Read data
      3. Progress information
      4. Header data
      5. Debug
      6. sockopt
      7. SSL context
      8. Seek and ioctl
      9. Network data conversion
      10. Opensocket and closesocket
      11. SSH key
      12. RTSP interleaved data
      13. FTP wildcard matching
      14. Resolver start
      15. Sending trailers
      16. HSTS
      17. Prereq
    5. Connection control
      1. How libcurl connects
      2. Local address and port number
      3. Connection reuse
      4. Keep alive
      5. Name resolving
      6. Proxies
    6. Transfer control
      1. Stop
      2. Stop slow transfers
      3. Rate limit
      4. Progress meter
      5. Progress callback
    7. Authentication
    8. Cleanup
    9. Post transfer info
  13. libcurl HTTP
    1. Responses
    2. Requests
    3. Versions
    4. Ranges
    5. Authentication
    6. Cookies
    7. Download
    8. Upload
    9. Multiplexing
    10. HSTS
    11. alt-svc
  14. libcurl WebSocket
    1. Support
    2. URLs
    3. Concept
    4. Options
    5. Read
    6. Meta
    7. Write
  15. libcurl share API
    1. Multi handle
    2. Sharing between easy handles
    3. What to share
    4. Locking
    5. Unshare
  16. libcurl URL API
    1. Include files
    2. Create
    3. Cleanup
    4. Duplicate
    5. Parse a URL
    6. Redirect to URL
    7. Get a URL
    8. Get URL parts
    9. Set URL parts
    10. Append to the query
    11. CURLOPT_CURLU
  17. libcurl headers API
    1. Header struct
    2. Get a header
    3. Iterate over headers
  18. libcurl examples
    1. Get a simple HTTP page
    2. Get a response into memory
    3. Submit a login form over HTTP
    4. Get an FTP directory listing
    5. Non-blocking HTTP form-post
    6. WebSocket with CONNECT_ONLY
    7. WebSocket using callback
  19. libcurl bindings
  20. libcurl internals
    1. Easy handles and connections
    2. Everything is multi
    3. State machines
    4. Protocol handler
    5. Backends
    6. Caches and state
    7. Timeouts
    8. Windows vs Unix
    9. Memory debugging
    10. Content Encoding
    11. Structs
    12. Resolving hostnames
    13. Tests
      1. Test file format
      2. Build tests
      3. Run tests
      4. Debug builds
      5. Test servers
      6. curl tests
      7. libcurl tests
      8. Unit tests
      9. Valgrind
      10. Continuous Integration
      11. Autobuilds
      12. Torture
  21. Index