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