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