summaryrefslogtreecommitdiff
path: root/docs/FEATURES.md
blob: f366154943a9c4b1812ec6c17ff0e2c2fdf6603f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
<!--
Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.

SPDX-License-Identifier: curl
-->

# Features -- what curl can do

## curl tool

 - config file support
 - multiple URLs in a single command line
 - range "globbing" support: [0-13], {one,two,three}
 - multiple file upload on a single command line
 - redirect stderr
 - parallel transfers

## libcurl

 - URL RFC 3986 syntax
 - custom maximum download time
 - custom lowest download speed acceptable
 - custom output result after completion
 - guesses protocol from hostname unless specified
 - supports .netrc
 - progress bar with time statistics while downloading
 - standard proxy environment variables support
 - have run on 101 operating systems and 28 CPU architectures
 - selectable network interface for outgoing traffic
 - IPv6 support on Unix and Windows
 - happy eyeballs dual-stack IPv4 + IPv6 connects
 - persistent connections
 - SOCKS 4 + 5 support, with or without local name resolving
 - *pre-proxy* support, for *proxy chaining*
 - supports username and password in proxy environment variables
 - operations through HTTP proxy "tunnel" (using CONNECT)
 - replaceable memory functions (malloc, free, realloc, etc)
 - asynchronous name resolving
 - both a push and a pull style interface
 - international domain names (IDN)
 - transfer rate limiting
 - stable API and ABI
 - TCP keep alive
 - TCP Fast Open
 - DNS cache (that can be shared between transfers)
 - non-blocking single-threaded parallel transfers
 - Unix domain sockets to server or proxy
 - DNS-over-HTTPS
 - uses non-blocking name resolves
 - selectable name resolver backend

## URL API

 - parses RFC 3986 URLs
 - generates URLs from individual components
 - manages "redirects"

## Header API

 - easy access to HTTP response headers, from all contexts
 - named headers
 - iterate over headers

## TLS

 - selectable TLS backend(s)
 - TLS False Start
 - TLS version control
 - TLS session resumption
 - key pinning
 - mutual authentication
 - Use dedicated CA cert bundle
 - Use OS-provided CA store
 - separate TLS options for HTTPS proxy

## HTTP

 - HTTP/0.9 responses are optionally accepted
 - HTTP/1.0
 - HTTP/1.1
 - HTTP/2, including multiplexing and server push
 - GET
 - PUT
 - HEAD
 - POST
 - multipart formpost (RFC 1867-style)
 - authentication: Basic, Digest, NTLM (9) and Negotiate (SPNEGO)
   to server and proxy
 - resume transfers
 - follow redirects
 - maximum amount of redirects to follow
 - custom HTTP request
 - cookie get/send fully parsed
 - reads/writes the Netscape cookie file format
 - custom headers (replace/remove internally generated headers)
 - custom user-agent string
 - custom referrer string
 - range
 - proxy authentication
 - time conditions
 - via HTTP proxy, HTTPS proxy or SOCKS proxy
 - HTTP/2 or HTTP/1.1 to HTTPS proxy
 - retrieve file modification date
 - Content-Encoding support for deflate, gzip, brotli and zstd
 - "Transfer-Encoding: chunked" support in uploads
 - HSTS
 - alt-svc
 - ETags
 - HTTP/1.1 trailers, both sending and getting

## HTTPS

 - HTTP/3
 - using client certificates
 - verify server certificate
 - via HTTP proxy, HTTPS proxy or SOCKS proxy
 - select desired encryption
 - select usage of a specific TLS version
 - ECH

## FTP

 - download
 - authentication
 - Kerberos 5
 - active/passive using PORT, EPRT, PASV or EPSV
 - single file size information (compare to HTTP HEAD)
 - 'type=' URL support
 - directory listing
 - directory listing names-only
 - upload
 - upload append
 - upload via http-proxy as HTTP PUT
 - download resume
 - upload resume
 - custom ftp commands (before and/or after the transfer)
 - simple "range" support
 - via HTTP proxy, HTTPS proxy or SOCKS proxy
 - all operations can be tunneled through proxy
 - customizable to retrieve file modification date
 - no directory depth limit

## FTPS

 - implicit `ftps://` support that use SSL on both connections
 - explicit "AUTH TLS" and "AUTH SSL" usage to "upgrade" plain `ftp://`
   connection to use SSL for both or one of the connections

## SSH (both SCP and SFTP)

 - selectable SSH backend
 - known hosts support
 - public key fingerprinting
 - both password and public key auth

## SFTP

 - both password and public key auth
 - with custom commands sent before/after the transfer
 - directory listing

## TFTP

 - download
 - upload

## TELNET

 - connection negotiation
 - custom telnet options
 - stdin/stdout I/O

## LDAP

 - full LDAP URL support

## DICT

 - extended DICT URL support

## FILE

 - URL support
 - upload
 - resume

## SMB

 - SMBv1 over TCP and SSL
 - download
 - upload
 - authentication with NTLMv1

## SMTP

 - authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM, Kerberos 5 and
   External
 - send emails
 - mail from support
 - mail size support
 - mail auth support for trusted server-to-server relaying
 - multiple recipients
 - via http-proxy

## SMTPS

 - implicit `smtps://` support
 - explicit "STARTTLS" usage to "upgrade" plain `smtp://` connections to use SSL
 - via http-proxy

## POP3

 - authentication: Clear Text, APOP and SASL
 - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM,
   Kerberos 5 and External
 - list emails
 - retrieve emails
 - enhanced command support for: CAPA, DELE, TOP, STAT, UIDL and NOOP via
   custom requests
 - via http-proxy

## POP3S

 - implicit `pop3s://` support
 - explicit `STLS` usage to "upgrade" plain `pop3://` connections to use SSL
 - via http-proxy

## IMAP

 - authentication: Clear Text and SASL
 - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM,
   Kerberos 5 and External
 - list the folders of a mailbox
 - select a mailbox with support for verifying the `UIDVALIDITY`
 - fetch emails with support for specifying the UID and SECTION
 - upload emails via the append command
 - enhanced command support for: EXAMINE, CREATE, DELETE, RENAME, STATUS,
   STORE, COPY and UID via custom requests
 - via http-proxy

## IMAPS

 - implicit `imaps://` support
 - explicit "STARTTLS" usage to "upgrade" plain `imap://` connections to use SSL
 - via http-proxy

## MQTT

 - Subscribe to and publish topics using URL scheme `mqtt://broker/topic`