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 helpers
❱
14.1.
Share data between handles
14.2.
URL API
❱
14.2.1.
Include files
14.2.2.
Create, cleanup, duplicate
14.2.3.
Parse a URL
14.2.4.
Redirect to URL
14.2.5.
Get a URL
14.2.6.
Get URL parts
14.2.7.
Set URL parts
14.2.8.
Append to the query
14.2.9.
CURLOPT_CURLU
14.3.
WebSocket
❱
14.3.1.
Support
14.3.2.
URLs
14.3.3.
Concept
14.3.4.
Options
14.3.5.
Read
14.3.6.
Meta
14.3.7.
Write
14.4.
Headers API
❱
14.4.1.
Header struct
14.4.2.
Get a header
14.4.3.
Iterate over headers
15.
libcurl examples
❱
15.1.
Get a simple HTTP page
15.2.
Get a response into memory
15.3.
Submit a login form over HTTP
15.4.
Get an FTP directory listing
15.5.
Non-blocking HTTP form-post
15.6.
WebSocket with CONNECT_ONLY
15.7.
WebSocket using callback
16.
libcurl bindings
17.
libcurl internals
❱
17.1.
Easy handles and connections
17.2.
Everything is multi
17.3.
State machines
17.4.
Protocol handler
17.5.
Backends
17.6.
Caches and state
17.7.
Timeouts
17.8.
Windows vs Unix
17.9.
Memory debugging
17.10.
Content Encoding
17.11.
Structs
17.12.
Resolving hostnames
17.13.
Tests
❱
17.13.1.
Test file format
17.13.2.
Build tests
17.13.3.
Run tests
17.13.4.
Debug builds
17.13.5.
Test servers
17.13.6.
curl tests
17.13.7.
libcurl tests
17.13.8.
Unit tests
17.13.9.
Valgrind
17.13.10.
Continuous Integration
17.13.11.
Autobuilds
17.13.12.
Torture
18.
Index
Light
Rust
Coal
Navy
Ayu
everything curl
Transfer control
An ongoing transfer can be controlled in several ways. The following pages describe further details:
Stop
Stop slow transfers
Rate limit
Progress meter
Progress callback