1.
Introduction
2.
How to read
3.
The cURL project
❱
3.1.
How it started
3.2.
The name
3.3.
What does curl do?
3.4.
Project communication
3.5.
Mailing list etiquette
3.6.
Mailing lists
3.7.
Reporting bugs
3.8.
Commercial support
3.9.
Releases
3.10.
Security
3.11.
Trust
3.12.
Code of Conduct
3.13.
Development
3.14.
The development team
3.15.
Users of curl
3.16.
Future
4.
Network and protocols
❱
4.1.
Networking simplified
4.2.
Protocols
4.3.
curl protocols
4.4.
HTTP basics
5.
Install curl and libcurl
❱
5.1.
Linux
5.2.
Windows
❱
5.2.1.
MSYS2
5.2.2.
vcpkg
5.3.
macOS
5.4.
Container
6.
Source code
❱
6.1.
Open Source
❱
6.1.1.
License
6.1.2.
Copyright
6.2.
Code layout
6.3.
Handling build options
6.4.
Code style
6.5.
Contributing
6.6.
Reporting vulnerabilities
6.7.
Website
7.
Build curl and libcurl
❱
7.1.
Autotools
7.2.
CMake
7.3.
Separate install
7.4.
Windows
7.5.
Dependencies
7.6.
TLS libraries
❱
7.6.1.
BoringSSL
8.
Command line concepts
❱
8.1.
Differences
8.2.
Command line options
❱
8.2.1.
Short options
8.2.2.
Long options
8.2.3.
Arguments to options
8.2.4.
Negative options
8.3.
Options depend on version
8.4.
URLs
❱
8.4.1.
Scheme
8.4.2.
Name and password
8.4.3.
Host
8.4.4.
Port number
8.4.5.
Path
8.4.6.
Query
8.4.7.
FTP type
8.4.8.
Fragment
8.4.9.
Browsers
8.4.10.
Many options and URLs
8.4.11.
URL globbing
8.4.12.
Connection reuse
8.4.13.
Parallel transfers
8.4.14.
trurl
8.5.
List options
8.6.
Config file
8.7.
Variables
8.8.
Passwords
8.9.
Progress meter
8.10.
Version
8.11.
Exit code
8.12.
Copy as curl
9.
Command line transfers
❱
9.1.
Verbose
❱
9.1.1.
Trace options
9.1.2.
Write out
9.2.
Downloads
❱
9.2.1.
What is downloading?
9.2.2.
Storing downloads
9.2.3.
Download to a file named by the URL
9.2.4.
Use the target filename from the server
9.2.5.
HTML and charsets
9.2.6.
Shell redirects
9.2.7.
Multiple downloads
9.2.8.
My browser shows something else
9.2.9.
Maximum filesize
9.2.10.
Storing metadata in file system
9.2.11.
Raw
9.2.12.
Retry
9.2.13.
Resuming and ranges
9.3.
Uploads
9.4.
Transfer controls
❱
9.4.1.
Stop slow transfers
9.4.2.
Rate limiting
9.4.3.
Request rate limiting
9.4.4.
Compression
9.5.
Connections
❱
9.5.1.
Name resolve tricks
9.5.2.
Connection timeout
9.5.3.
Happy Eyeballs
9.5.4.
Network interface
9.5.5.
Local port number
9.5.6.
Keep alive
9.6.
Timeouts
9.7.
.netrc
9.8.
Proxies
❱
9.8.1.
Discover your proxy
9.8.2.
PAC
9.8.3.
Captive portals
9.8.4.
Proxy type
9.8.5.
HTTP proxy
9.8.6.
SOCKS proxy
9.8.7.
MITM proxy
9.8.8.
Proxy authentication
9.8.9.
HTTPS proxy
9.8.10.
Proxy environment variables
9.8.11.
Proxy headers
9.8.12.
haproxy
9.9.
TLS
❱
9.9.1.
Ciphers
9.9.2.
Enable TLS
9.9.3.
TLS versions
9.9.4.
Verifying server certificates
9.9.5.
Certificate pinning
9.9.6.
OCSP stapling
9.9.7.
Client certificates
9.9.8.
TLS auth
9.9.9.
TLS backends
9.9.10.
SSLKEYLOGFILE
9.10.
SCP and SFTP
❱
9.10.1.
URLs
9.10.2.
Authentication
9.10.3.
Known hosts
9.11.
Reading email
9.12.
Sending email
9.13.
DICT
9.14.
IPFS
9.15.
MQTT
9.16.
TELNET
9.17.
TFTP
10.
Command line HTTP
❱
10.1.
Method
10.2.
Responses
10.3.
Authentication
10.4.
HTTP versions
❱
10.4.1.
HTTP/0.9
10.4.2.
HTTP/2
10.4.3.
HTTP/3
10.5.
HTTP POST
❱
10.5.1.
Simple POST
10.5.2.
Content-Type
10.5.3.
Posting binary
10.5.4.
JSON
10.5.5.
URL encode data
10.5.6.
Convert to GET
10.5.7.
Expect 100-continue
10.5.8.
Chunked encoded POSTs
10.5.9.
Hidden form fields
10.5.10.
Figure out what a browser sends
10.5.11.
JavaScript and forms
10.5.12.
Multipart formposts
10.5.13.
-d vs -F
10.6.
HTTP PUT
10.7.
Redirects
10.8.
Customize your HTTP
❱
10.8.1.
Request method
10.8.2.
Request target
10.8.3.
Fragment
10.8.4.
Customize headers
10.8.5.
Referer
10.8.6.
User-agent
10.8.7.
Ranges
10.8.8.
Conditionals
10.8.9.
Compression
10.9.
Cookies
❱
10.9.1.
Cookie engine
10.9.2.
Reading cookies from file
10.9.3.
Writing cookies to file
10.9.4.
New cookie session
10.9.5.
Cookie file format
10.10.
HTTPS
❱
10.10.1.
HSTS
10.10.2.
Alternative Services
10.11.
Scripting browser-like tasks
11.
Command line FTP
❱
11.1.
FTP Directory listing
11.2.
Uploading with FTP
11.3.
Custom FTP commands
11.4.
Two connections
11.5.
Directory traversing
11.6.
FTPS
12.
libcurl
❱
12.1.
Header files
12.2.
Global initialization
12.3.
API compatibility
12.4.
--libcurl
12.5.
multi-threading
12.6.
CURLcode return codes
12.7.
Verbose operations
12.8.
Caches
12.9.
Performance
12.10.
for C++ programmers
13.
libcurl transfers
❱
13.1.
Easy handle
13.2.
curl easy options
❱
13.2.1.
Set numerical options
13.2.2.
Set string options
13.2.3.
TLS options
13.2.4.
All options
13.2.5.
Get option information
13.3.
Drive transfers
❱
13.3.1.
Drive with easy
13.3.2.
Drive with multi
13.3.3.
Drive with multi_socket
13.4.
Callbacks
❱
13.4.1.
Write data
13.4.2.
Read data
13.4.3.
Progress information
13.4.4.
Header data
13.4.5.
Debug
13.4.6.
sockopt
13.4.7.
SSL context
13.4.8.
Seek and ioctl
13.4.9.
Network data conversion
13.4.10.
Opensocket and closesocket
13.4.11.
SSH key
13.4.12.
RTSP interleaved data
13.4.13.
FTP wildcard matching
13.4.14.
Resolver start
13.4.15.
Sending trailers
13.4.16.
HSTS
13.4.17.
Prereq
13.5.
Connection control
❱
13.5.1.
How libcurl connects
13.5.2.
Local address and port number
13.5.3.
Connection reuse
13.5.4.
Keep alive
13.5.5.
Name resolving
13.5.6.
Proxies
13.6.
Transfer control
❱
13.6.1.
Stop
13.6.2.
Stop slow transfers
13.6.3.
Rate limit
13.6.4.
Progress meter
13.6.5.
Progress callback
13.7.
Authentication
13.8.
Cleanup
13.9.
Post transfer info
14.
libcurl HTTP
❱
14.1.
Responses
14.2.
Requests
14.3.
Versions
14.4.
Ranges
14.5.
Authentication
14.6.
Cookies
14.7.
Download
14.8.
Upload
14.9.
Multiplexing
14.10.
HSTS
14.11.
alt-svc
15.
libcurl helpers
❱
15.1.
Share data between handles
15.2.
URL API
❱
15.2.1.
Include files
15.2.2.
Create, cleanup, duplicate
15.2.3.
Parse a URL
15.2.4.
Redirect to URL
15.2.5.
Get a URL
15.2.6.
Get URL parts
15.2.7.
Set URL parts
15.2.8.
Append to the query
15.2.9.
CURLOPT_CURLU
15.3.
WebSocket
❱
15.3.1.
Support
15.3.2.
URLs
15.3.3.
Concept
15.3.4.
Options
15.3.5.
Read
15.3.6.
Meta
15.3.7.
Write
15.4.
Headers API
❱
15.4.1.
Header struct
15.4.2.
Get a header
15.4.3.
Iterate over headers
16.
libcurl examples
❱
16.1.
Get a simple HTTP page
16.2.
Get a response into memory
16.3.
Submit a login form over HTTP
16.4.
Get an FTP directory listing
16.5.
Non-blocking HTTP form-post
17.
libcurl bindings
18.
libcurl internals
❱
18.1.
Easy handles and connections
18.2.
Everything is multi
18.3.
State machines
18.4.
Protocol handler
18.5.
Backends
18.6.
Caches and state
18.7.
Timeouts
18.8.
Windows vs Unix
18.9.
Memory debugging
18.10.
Content Encoding
18.11.
Structs
18.12.
Resolving hostnames
18.13.
Tests
❱
18.13.1.
Test file format
18.13.2.
Build tests
18.13.3.
Run tests
18.13.4.
Debug builds
18.13.5.
Test servers
18.13.6.
curl tests
18.13.7.
libcurl tests
18.13.8.
Unit tests
18.13.9.
Valgrind
18.13.10.
Continuous Integration
18.13.11.
Autobuilds
18.13.12.
Torture
19.
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