xref: /aosp_15_r20/external/curl/docs/FEATURES.md (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker<!--
2*6236dae4SAndroid Build Coastguard WorkerCopyright (C) Daniel Stenberg, <[email protected]>, et al.
3*6236dae4SAndroid Build Coastguard Worker
4*6236dae4SAndroid Build Coastguard WorkerSPDX-License-Identifier: curl
5*6236dae4SAndroid Build Coastguard Worker-->
6*6236dae4SAndroid Build Coastguard Worker
7*6236dae4SAndroid Build Coastguard Worker# Features -- what curl can do
8*6236dae4SAndroid Build Coastguard Worker
9*6236dae4SAndroid Build Coastguard Worker## curl tool
10*6236dae4SAndroid Build Coastguard Worker
11*6236dae4SAndroid Build Coastguard Worker - config file support
12*6236dae4SAndroid Build Coastguard Worker - multiple URLs in a single command line
13*6236dae4SAndroid Build Coastguard Worker - range "globbing" support: [0-13], {one,two,three}
14*6236dae4SAndroid Build Coastguard Worker - multiple file upload on a single command line
15*6236dae4SAndroid Build Coastguard Worker - redirect stderr
16*6236dae4SAndroid Build Coastguard Worker - parallel transfers
17*6236dae4SAndroid Build Coastguard Worker
18*6236dae4SAndroid Build Coastguard Worker## libcurl
19*6236dae4SAndroid Build Coastguard Worker
20*6236dae4SAndroid Build Coastguard Worker - URL RFC 3986 syntax
21*6236dae4SAndroid Build Coastguard Worker - custom maximum download time
22*6236dae4SAndroid Build Coastguard Worker - custom lowest download speed acceptable
23*6236dae4SAndroid Build Coastguard Worker - custom output result after completion
24*6236dae4SAndroid Build Coastguard Worker - guesses protocol from hostname unless specified
25*6236dae4SAndroid Build Coastguard Worker - supports .netrc
26*6236dae4SAndroid Build Coastguard Worker - progress bar with time statistics while downloading
27*6236dae4SAndroid Build Coastguard Worker - standard proxy environment variables support
28*6236dae4SAndroid Build Coastguard Worker - have run on 101 operating systems and 28 CPU architectures
29*6236dae4SAndroid Build Coastguard Worker - selectable network interface for outgoing traffic
30*6236dae4SAndroid Build Coastguard Worker - IPv6 support on Unix and Windows
31*6236dae4SAndroid Build Coastguard Worker - happy eyeballs dual-stack IPv4 + IPv6 connects
32*6236dae4SAndroid Build Coastguard Worker - persistent connections
33*6236dae4SAndroid Build Coastguard Worker - SOCKS 4 + 5 support, with or without local name resolving
34*6236dae4SAndroid Build Coastguard Worker - *pre-proxy* support, for *proxy chaining*
35*6236dae4SAndroid Build Coastguard Worker - supports username and password in proxy environment variables
36*6236dae4SAndroid Build Coastguard Worker - operations through HTTP proxy "tunnel" (using CONNECT)
37*6236dae4SAndroid Build Coastguard Worker - replaceable memory functions (malloc, free, realloc, etc)
38*6236dae4SAndroid Build Coastguard Worker - asynchronous name resolving
39*6236dae4SAndroid Build Coastguard Worker - both a push and a pull style interface
40*6236dae4SAndroid Build Coastguard Worker - international domain names (IDN)
41*6236dae4SAndroid Build Coastguard Worker - transfer rate limiting
42*6236dae4SAndroid Build Coastguard Worker - stable API and ABI
43*6236dae4SAndroid Build Coastguard Worker - TCP keep alive
44*6236dae4SAndroid Build Coastguard Worker - TCP Fast Open
45*6236dae4SAndroid Build Coastguard Worker - DNS cache (that can be shared between transfers)
46*6236dae4SAndroid Build Coastguard Worker - non-blocking single-threaded parallel transfers
47*6236dae4SAndroid Build Coastguard Worker - Unix domain sockets to server or proxy
48*6236dae4SAndroid Build Coastguard Worker - DNS-over-HTTPS
49*6236dae4SAndroid Build Coastguard Worker - uses non-blocking name resolves
50*6236dae4SAndroid Build Coastguard Worker - selectable name resolver backend
51*6236dae4SAndroid Build Coastguard Worker
52*6236dae4SAndroid Build Coastguard Worker## URL API
53*6236dae4SAndroid Build Coastguard Worker
54*6236dae4SAndroid Build Coastguard Worker - parses RFC 3986 URLs
55*6236dae4SAndroid Build Coastguard Worker - generates URLs from individual components
56*6236dae4SAndroid Build Coastguard Worker - manages "redirects"
57*6236dae4SAndroid Build Coastguard Worker
58*6236dae4SAndroid Build Coastguard Worker## Header API
59*6236dae4SAndroid Build Coastguard Worker
60*6236dae4SAndroid Build Coastguard Worker - easy access to HTTP response headers, from all contexts
61*6236dae4SAndroid Build Coastguard Worker - named headers
62*6236dae4SAndroid Build Coastguard Worker - iterate over headers
63*6236dae4SAndroid Build Coastguard Worker
64*6236dae4SAndroid Build Coastguard Worker## TLS
65*6236dae4SAndroid Build Coastguard Worker
66*6236dae4SAndroid Build Coastguard Worker - selectable TLS backend(s)
67*6236dae4SAndroid Build Coastguard Worker - TLS False Start
68*6236dae4SAndroid Build Coastguard Worker - TLS version control
69*6236dae4SAndroid Build Coastguard Worker - TLS session resumption
70*6236dae4SAndroid Build Coastguard Worker - key pinning
71*6236dae4SAndroid Build Coastguard Worker - mutual authentication
72*6236dae4SAndroid Build Coastguard Worker - Use dedicated CA cert bundle
73*6236dae4SAndroid Build Coastguard Worker - Use OS-provided CA store
74*6236dae4SAndroid Build Coastguard Worker - separate TLS options for HTTPS proxy
75*6236dae4SAndroid Build Coastguard Worker
76*6236dae4SAndroid Build Coastguard Worker## HTTP
77*6236dae4SAndroid Build Coastguard Worker
78*6236dae4SAndroid Build Coastguard Worker - HTTP/0.9 responses are optionally accepted
79*6236dae4SAndroid Build Coastguard Worker - HTTP/1.0
80*6236dae4SAndroid Build Coastguard Worker - HTTP/1.1
81*6236dae4SAndroid Build Coastguard Worker - HTTP/2, including multiplexing and server push
82*6236dae4SAndroid Build Coastguard Worker - GET
83*6236dae4SAndroid Build Coastguard Worker - PUT
84*6236dae4SAndroid Build Coastguard Worker - HEAD
85*6236dae4SAndroid Build Coastguard Worker - POST
86*6236dae4SAndroid Build Coastguard Worker - multipart formpost (RFC 1867-style)
87*6236dae4SAndroid Build Coastguard Worker - authentication: Basic, Digest, NTLM (9) and Negotiate (SPNEGO)
88*6236dae4SAndroid Build Coastguard Worker   to server and proxy
89*6236dae4SAndroid Build Coastguard Worker - resume transfers
90*6236dae4SAndroid Build Coastguard Worker - follow redirects
91*6236dae4SAndroid Build Coastguard Worker - maximum amount of redirects to follow
92*6236dae4SAndroid Build Coastguard Worker - custom HTTP request
93*6236dae4SAndroid Build Coastguard Worker - cookie get/send fully parsed
94*6236dae4SAndroid Build Coastguard Worker - reads/writes the Netscape cookie file format
95*6236dae4SAndroid Build Coastguard Worker - custom headers (replace/remove internally generated headers)
96*6236dae4SAndroid Build Coastguard Worker - custom user-agent string
97*6236dae4SAndroid Build Coastguard Worker - custom referrer string
98*6236dae4SAndroid Build Coastguard Worker - range
99*6236dae4SAndroid Build Coastguard Worker - proxy authentication
100*6236dae4SAndroid Build Coastguard Worker - time conditions
101*6236dae4SAndroid Build Coastguard Worker - via HTTP proxy, HTTPS proxy or SOCKS proxy
102*6236dae4SAndroid Build Coastguard Worker - HTTP/2 or HTTP/1.1 to HTTPS proxy
103*6236dae4SAndroid Build Coastguard Worker - retrieve file modification date
104*6236dae4SAndroid Build Coastguard Worker - Content-Encoding support for deflate, gzip, brotli and zstd
105*6236dae4SAndroid Build Coastguard Worker - "Transfer-Encoding: chunked" support in uploads
106*6236dae4SAndroid Build Coastguard Worker - HSTS
107*6236dae4SAndroid Build Coastguard Worker - alt-svc
108*6236dae4SAndroid Build Coastguard Worker - ETags
109*6236dae4SAndroid Build Coastguard Worker - HTTP/1.1 trailers, both sending and getting
110*6236dae4SAndroid Build Coastguard Worker
111*6236dae4SAndroid Build Coastguard Worker## HTTPS
112*6236dae4SAndroid Build Coastguard Worker
113*6236dae4SAndroid Build Coastguard Worker - HTTP/3
114*6236dae4SAndroid Build Coastguard Worker - using client certificates
115*6236dae4SAndroid Build Coastguard Worker - verify server certificate
116*6236dae4SAndroid Build Coastguard Worker - via HTTP proxy, HTTPS proxy or SOCKS proxy
117*6236dae4SAndroid Build Coastguard Worker - select desired encryption
118*6236dae4SAndroid Build Coastguard Worker - select usage of a specific TLS version
119*6236dae4SAndroid Build Coastguard Worker - ECH
120*6236dae4SAndroid Build Coastguard Worker
121*6236dae4SAndroid Build Coastguard Worker## FTP
122*6236dae4SAndroid Build Coastguard Worker
123*6236dae4SAndroid Build Coastguard Worker - download
124*6236dae4SAndroid Build Coastguard Worker - authentication
125*6236dae4SAndroid Build Coastguard Worker - Kerberos 5
126*6236dae4SAndroid Build Coastguard Worker - active/passive using PORT, EPRT, PASV or EPSV
127*6236dae4SAndroid Build Coastguard Worker - single file size information (compare to HTTP HEAD)
128*6236dae4SAndroid Build Coastguard Worker - 'type=' URL support
129*6236dae4SAndroid Build Coastguard Worker - directory listing
130*6236dae4SAndroid Build Coastguard Worker - directory listing names-only
131*6236dae4SAndroid Build Coastguard Worker - upload
132*6236dae4SAndroid Build Coastguard Worker - upload append
133*6236dae4SAndroid Build Coastguard Worker - upload via http-proxy as HTTP PUT
134*6236dae4SAndroid Build Coastguard Worker - download resume
135*6236dae4SAndroid Build Coastguard Worker - upload resume
136*6236dae4SAndroid Build Coastguard Worker - custom ftp commands (before and/or after the transfer)
137*6236dae4SAndroid Build Coastguard Worker - simple "range" support
138*6236dae4SAndroid Build Coastguard Worker - via HTTP proxy, HTTPS proxy or SOCKS proxy
139*6236dae4SAndroid Build Coastguard Worker - all operations can be tunneled through proxy
140*6236dae4SAndroid Build Coastguard Worker - customizable to retrieve file modification date
141*6236dae4SAndroid Build Coastguard Worker - no directory depth limit
142*6236dae4SAndroid Build Coastguard Worker
143*6236dae4SAndroid Build Coastguard Worker## FTPS
144*6236dae4SAndroid Build Coastguard Worker
145*6236dae4SAndroid Build Coastguard Worker - implicit `ftps://` support that use SSL on both connections
146*6236dae4SAndroid Build Coastguard Worker - explicit "AUTH TLS" and "AUTH SSL" usage to "upgrade" plain `ftp://`
147*6236dae4SAndroid Build Coastguard Worker   connection to use SSL for both or one of the connections
148*6236dae4SAndroid Build Coastguard Worker
149*6236dae4SAndroid Build Coastguard Worker## SSH (both SCP and SFTP)
150*6236dae4SAndroid Build Coastguard Worker
151*6236dae4SAndroid Build Coastguard Worker - selectable SSH backend
152*6236dae4SAndroid Build Coastguard Worker - known hosts support
153*6236dae4SAndroid Build Coastguard Worker - public key fingerprinting
154*6236dae4SAndroid Build Coastguard Worker - both password and public key auth
155*6236dae4SAndroid Build Coastguard Worker
156*6236dae4SAndroid Build Coastguard Worker## SFTP
157*6236dae4SAndroid Build Coastguard Worker
158*6236dae4SAndroid Build Coastguard Worker - both password and public key auth
159*6236dae4SAndroid Build Coastguard Worker - with custom commands sent before/after the transfer
160*6236dae4SAndroid Build Coastguard Worker - directory listing
161*6236dae4SAndroid Build Coastguard Worker
162*6236dae4SAndroid Build Coastguard Worker## TFTP
163*6236dae4SAndroid Build Coastguard Worker
164*6236dae4SAndroid Build Coastguard Worker - download
165*6236dae4SAndroid Build Coastguard Worker - upload
166*6236dae4SAndroid Build Coastguard Worker
167*6236dae4SAndroid Build Coastguard Worker## TELNET
168*6236dae4SAndroid Build Coastguard Worker
169*6236dae4SAndroid Build Coastguard Worker - connection negotiation
170*6236dae4SAndroid Build Coastguard Worker - custom telnet options
171*6236dae4SAndroid Build Coastguard Worker - stdin/stdout I/O
172*6236dae4SAndroid Build Coastguard Worker
173*6236dae4SAndroid Build Coastguard Worker## LDAP
174*6236dae4SAndroid Build Coastguard Worker
175*6236dae4SAndroid Build Coastguard Worker - full LDAP URL support
176*6236dae4SAndroid Build Coastguard Worker
177*6236dae4SAndroid Build Coastguard Worker## DICT
178*6236dae4SAndroid Build Coastguard Worker
179*6236dae4SAndroid Build Coastguard Worker - extended DICT URL support
180*6236dae4SAndroid Build Coastguard Worker
181*6236dae4SAndroid Build Coastguard Worker## FILE
182*6236dae4SAndroid Build Coastguard Worker
183*6236dae4SAndroid Build Coastguard Worker - URL support
184*6236dae4SAndroid Build Coastguard Worker - upload
185*6236dae4SAndroid Build Coastguard Worker - resume
186*6236dae4SAndroid Build Coastguard Worker
187*6236dae4SAndroid Build Coastguard Worker## SMB
188*6236dae4SAndroid Build Coastguard Worker
189*6236dae4SAndroid Build Coastguard Worker - SMBv1 over TCP and SSL
190*6236dae4SAndroid Build Coastguard Worker - download
191*6236dae4SAndroid Build Coastguard Worker - upload
192*6236dae4SAndroid Build Coastguard Worker - authentication with NTLMv1
193*6236dae4SAndroid Build Coastguard Worker
194*6236dae4SAndroid Build Coastguard Worker## SMTP
195*6236dae4SAndroid Build Coastguard Worker
196*6236dae4SAndroid Build Coastguard Worker - authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM, Kerberos 5 and
197*6236dae4SAndroid Build Coastguard Worker   External
198*6236dae4SAndroid Build Coastguard Worker - send emails
199*6236dae4SAndroid Build Coastguard Worker - mail from support
200*6236dae4SAndroid Build Coastguard Worker - mail size support
201*6236dae4SAndroid Build Coastguard Worker - mail auth support for trusted server-to-server relaying
202*6236dae4SAndroid Build Coastguard Worker - multiple recipients
203*6236dae4SAndroid Build Coastguard Worker - via http-proxy
204*6236dae4SAndroid Build Coastguard Worker
205*6236dae4SAndroid Build Coastguard Worker## SMTPS
206*6236dae4SAndroid Build Coastguard Worker
207*6236dae4SAndroid Build Coastguard Worker - implicit `smtps://` support
208*6236dae4SAndroid Build Coastguard Worker - explicit "STARTTLS" usage to "upgrade" plain `smtp://` connections to use SSL
209*6236dae4SAndroid Build Coastguard Worker - via http-proxy
210*6236dae4SAndroid Build Coastguard Worker
211*6236dae4SAndroid Build Coastguard Worker## POP3
212*6236dae4SAndroid Build Coastguard Worker
213*6236dae4SAndroid Build Coastguard Worker - authentication: Clear Text, APOP and SASL
214*6236dae4SAndroid Build Coastguard Worker - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM,
215*6236dae4SAndroid Build Coastguard Worker   Kerberos 5 and External
216*6236dae4SAndroid Build Coastguard Worker - list emails
217*6236dae4SAndroid Build Coastguard Worker - retrieve emails
218*6236dae4SAndroid Build Coastguard Worker - enhanced command support for: CAPA, DELE, TOP, STAT, UIDL and NOOP via
219*6236dae4SAndroid Build Coastguard Worker   custom requests
220*6236dae4SAndroid Build Coastguard Worker - via http-proxy
221*6236dae4SAndroid Build Coastguard Worker
222*6236dae4SAndroid Build Coastguard Worker## POP3S
223*6236dae4SAndroid Build Coastguard Worker
224*6236dae4SAndroid Build Coastguard Worker - implicit `pop3s://` support
225*6236dae4SAndroid Build Coastguard Worker - explicit `STLS` usage to "upgrade" plain `pop3://` connections to use SSL
226*6236dae4SAndroid Build Coastguard Worker - via http-proxy
227*6236dae4SAndroid Build Coastguard Worker
228*6236dae4SAndroid Build Coastguard Worker## IMAP
229*6236dae4SAndroid Build Coastguard Worker
230*6236dae4SAndroid Build Coastguard Worker - authentication: Clear Text and SASL
231*6236dae4SAndroid Build Coastguard Worker - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM,
232*6236dae4SAndroid Build Coastguard Worker   Kerberos 5 and External
233*6236dae4SAndroid Build Coastguard Worker - list the folders of a mailbox
234*6236dae4SAndroid Build Coastguard Worker - select a mailbox with support for verifying the `UIDVALIDITY`
235*6236dae4SAndroid Build Coastguard Worker - fetch emails with support for specifying the UID and SECTION
236*6236dae4SAndroid Build Coastguard Worker - upload emails via the append command
237*6236dae4SAndroid Build Coastguard Worker - enhanced command support for: EXAMINE, CREATE, DELETE, RENAME, STATUS,
238*6236dae4SAndroid Build Coastguard Worker   STORE, COPY and UID via custom requests
239*6236dae4SAndroid Build Coastguard Worker - via http-proxy
240*6236dae4SAndroid Build Coastguard Worker
241*6236dae4SAndroid Build Coastguard Worker## IMAPS
242*6236dae4SAndroid Build Coastguard Worker
243*6236dae4SAndroid Build Coastguard Worker - implicit `imaps://` support
244*6236dae4SAndroid Build Coastguard Worker - explicit "STARTTLS" usage to "upgrade" plain `imap://` connections to use SSL
245*6236dae4SAndroid Build Coastguard Worker - via http-proxy
246*6236dae4SAndroid Build Coastguard Worker
247*6236dae4SAndroid Build Coastguard Worker## MQTT
248*6236dae4SAndroid Build Coastguard Worker
249*6236dae4SAndroid Build Coastguard Worker - Subscribe to and publish topics using URL scheme `mqtt://broker/topic`
250