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