1# Features -- what curl can do
2
3## curl tool
4
5 - config file support
6 - multiple URLs in a single command line
7 - range "globbing" support: [0-13], {one,two,three}
8 - multiple file upload on a single command line
9 - custom maximum transfer rate
10 - redirectable stderr
11 - parallel transfers
12
13## libcurl
14
15 - full URL syntax with no length limit
16 - custom maximum download time
17 - custom least download speed acceptable
18 - custom output result after completion
19 - guesses protocol from host name unless specified
20 - uses .netrc
21 - progress bar with time statistics while downloading
22 - "standard" proxy environment variables support
23 - compiles on win32 (reported builds on 70+ operating systems)
24 - selectable network interface for outgoing traffic
25 - IPv6 support on unix and Windows
26 - happy eyeballs dual-stack connects
27 - persistent connections
28 - SOCKS 4 + 5 support, with or without local name resolving
29 - supports user name and password in proxy environment variables
30 - operations through HTTP proxy "tunnel" (using CONNECT)
31 - replaceable memory functions (malloc, free, realloc, etc)
32 - asynchronous name resolving (6)
33 - both a push and a pull style interface
34 - international domain names (11)
35
36## HTTP
37
38 - HTTP/0.9 responses are optionally accepted
39 - HTTP/1.0
40 - HTTP/1.1
41 - HTTP/2, including multiplexing and server push (5)
42 - GET
43 - PUT
44 - HEAD
45 - POST
46 - multipart formpost (RFC1867-style)
47 - authentication: Basic, Digest, NTLM (9) and Negotiate (SPNEGO) (3)
48   to server and proxy
49 - resume (both GET and PUT)
50 - follow redirects
51 - maximum amount of redirects to follow
52 - custom HTTP request
53 - cookie get/send fully parsed
54 - reads/writes the netscape cookie file format
55 - custom headers (replace/remove internally generated headers)
56 - custom user-agent string
57 - custom referrer string
58 - range
59 - proxy authentication
60 - time conditions
61 - via HTTP proxy, HTTPS proxy or SOCKS proxy
62 - retrieve file modification date
63 - Content-Encoding support for deflate and gzip
64 - "Transfer-Encoding: chunked" support in uploads
65 - automatic data compression (12)
66
67## HTTPS (1)
68
69 - (all the HTTP features)
70 - HTTP/3 experimental support
71 - using client certificates
72 - verify server certificate
73 - via HTTP proxy, HTTPS proxy or SOCKS proxy
74 - select desired encryption
75 - select usage of a specific SSL version
76
77## FTP
78
79 - download
80 - authentication
81 - Kerberos 5 (13)
82 - active/passive using PORT, EPRT, PASV or EPSV
83 - single file size information (compare to HTTP HEAD)
84 - 'type=' URL support
85 - dir listing
86 - dir listing names-only
87 - upload
88 - upload append
89 - upload via http-proxy as HTTP PUT
90 - download resume
91 - upload resume
92 - custom ftp commands (before and/or after the transfer)
93 - simple "range" support
94 - via HTTP proxy, HTTPS proxy or SOCKS proxy
95 - all operations can be tunneled through proxy
96 - customizable to retrieve file modification date
97 - no dir depth limit
98
99## FTPS (1)
100
101 - implicit `ftps://` support that use SSL on both connections
102 - explicit "AUTH TLS" and "AUTH SSL" usage to "upgrade" plain `ftp://`
103   connection to use SSL for both or one of the connections
104
105## SCP (8)
106
107 - both password and public key auth
108
109## SFTP (7)
110
111 - both password and public key auth
112 - with custom commands sent before/after the transfer
113
114## TFTP
115
116 - download
117 - upload
118
119## TELNET
120
121 - connection negotiation
122 - custom telnet options
123 - stdin/stdout I/O
124
125## LDAP (2)
126
127 - full LDAP URL support
128
129## DICT
130
131 - extended DICT URL support
132
133## FILE
134
135 - URL support
136 - upload
137 - resume
138
139## SMB
140
141 - SMBv1 over TCP and SSL
142 - download
143 - upload
144 - authentication with NTLMv1
145
146## SMTP
147
148 - authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (9), Kerberos 5
149   (4) and External.
150 - send e-mails
151 - mail from support
152 - mail size support
153 - mail auth support for trusted server-to-server relaying
154 - multiple recipients
155 - via http-proxy
156
157## SMTPS (1)
158
159 - implicit `smtps://` support
160 - explicit "STARTTLS" usage to "upgrade" plain `smtp://` connections to use SSL
161 - via http-proxy
162
163## POP3
164
165 - authentication: Clear Text, APOP and SASL
166 - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (9),
167   Kerberos 5 (4) and External.
168 - list e-mails
169 - retrieve e-mails
170 - enhanced command support for: CAPA, DELE, TOP, STAT, UIDL and NOOP via
171   custom requests
172 - via http-proxy
173
174## POP3S (1)
175
176 - implicit `pop3s://` support
177 - explicit "STLS" usage to "upgrade" plain `pop3://` connections to use SSL
178 - via http-proxy
179
180## IMAP
181
182 - authentication: Clear Text and SASL
183 - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (9),
184   Kerberos 5 (4) and External.
185 - list the folders of a mailbox
186 - select a mailbox with support for verifying the UIDVALIDITY
187 - fetch e-mails with support for specifying the UID and SECTION
188 - upload e-mails via the append command
189 - enhanced command support for: EXAMINE, CREATE, DELETE, RENAME, STATUS,
190   STORE, COPY and UID via custom requests
191 - via http-proxy
192
193## IMAPS (1)
194
195 - implicit `imaps://` support
196 - explicit "STARTTLS" usage to "upgrade" plain `imap://` connections to use SSL
197 - via http-proxy
198
199## MQTT
200
201 - Subscribe to and publish topics using url scheme `mqtt://broker/topic`
202
203## Footnotes
204
205  1. requires a TLS library
206  2. requires OpenLDAP or WinLDAP
207  3. requires a GSS-API implementation (such as Heimdal or MIT Kerberos) or
208     SSPI (native Windows)
209  4. requires a GSS-API implementation, however, only Windows SSPI is
210     currently supported
211  5. requires nghttp2
212  6. requires c-ares
213  7. requires libssh2, libssh or wolfSSH
214  8. requires libssh2 or libssh
215  9. requires OpenSSL, GnuTLS, mbedTLS, NSS, yassl, Secure Transport or SSPI
216     (native Windows)
217  10. -
218  11. requires libidn2 or Windows
219  12. requires libz, brotli and/or zstd
220  13. requires a GSS-API implementation (such as Heimdal or MIT Kerberos)
221