How to use curl command (HTTP request)

This section summarizes the main ways to use the curl command. The following topics will be covered: “How to specify output such as ResponseHeader only”, “How to specify HTTP methods”, “How to send data”, “How to specify request headers”, “Receiving and sending cookies”, “Basic authentication”, and more.

TOC

output specification

Output only ResponseBody ( No options specified )

$ curl http://localhost:8000
Hello, World!

Output only ResponseHeader ( -I --head )

$ curl -I http://localhost:8000 
HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Date: Mon, 03 May 2021 08:11:19 GMT
Content-Length: 13

Output ResponseHeader and ResponseBody ( -i --include )

$ curl -i http://localhost:8000 
HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Date: Mon, 03 May 2021 08:13:43 GMT
Content-Length: 13

Hello, World!

Output RequestHeader, ResponseHeader and ResponseBody ( -v --verbose )

$ curl -v http://localhost:8000 
*   Trying ::1:8000...
* Connected to localhost (::1) port 8000 (#0)
> GET / HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.71.1
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Type: text/plain; charset=UTF-8
< Date: Mon, 03 May 2021 08:11:53 GMT
< Content-Length: 13
< 
* Connection #0 to host localhost left intact
Hello, World!

packet data ( --trace <file> --trace-ascii <file> )

$ curl --trace /dev/stdout http://localhost:8000
== Info:   Trying ::1:8000...
== Info: Connected to localhost (::1) port 8000 (#0)
=> Send header, 78 bytes (0x4e)
0000: 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a GET / HTTP/1.1..
0010: 48 6f 73 74 3a 20 6c 6f 63 61 6c 68 6f 73 74 3a Host: localhost:
0020: 38 30 30 30 0d 0a 55 73 65 72 2d 41 67 65 6e 74 8000..User-Agent
0030: 3a 20 63 75 72 6c 2f 37 2e 37 31 2e 31 0d 0a 41 : curl/7.71.1..A
0040: 63 63 65 70 74 3a 20 2a 2f 2a 0d 0a 0d 0a       ccept: */*....
== Info: Mark bundle as not supporting multiuse
<= Recv header, 17 bytes (0x11)
0000: 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK.
0010: 0a                                              .
<= Recv header, 41 bytes (0x29)
0000: 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 Content-Type: te
0010: 78 74 2f 70 6c 61 69 6e 3b 20 63 68 61 72 73 65 xt/plain; charse
0020: 74 3d 55 54 46 2d 38 0d 0a                      t=UTF-8..
<= Recv header, 37 bytes (0x25)
0000: 44 61 74 65 3a 20 4d 6f 6e 2c 20 30 33 20 4d 61 Date: Mon, 03 Ma
0010: 79 20 32 30 32 31 20 30 38 3a 31 34 3a 34 36 20 y 2021 08:14:46 
0020: 47 4d 54 0d 0a                                  GMT..
<= Recv header, 20 bytes (0x14)
0000: 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 Content-Length: 
0010: 31 33 0d 0a                                     13..
<= Recv header, 2 bytes (0x2)
0000: 0d 0a                                           ..
<= Recv data, 13 bytes (0xd)
0000: 48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 21          Hello, World!
== Info: Connection #0 to host localhost left intact
Hello, World!
$ curl --trace-ascii /dev/stdout http://localhost:8000 
== Info:   Trying ::1:8000...
== Info: Connected to localhost (::1) port 8000 (#0)
=> Send header, 78 bytes (0x4e)
0000: GET / HTTP/1.1
0010: Host: localhost:8000
0026: User-Agent: curl/7.71.1
003f: Accept: */*
004c: 
== Info: Mark bundle as not supporting multiuse
<= Recv header, 17 bytes (0x11)
0000: HTTP/1.1 200 OK
<= Recv header, 41 bytes (0x29)
0000: Content-Type: text/plain; charset=UTF-8
<= Recv header, 37 bytes (0x25)
0000: Date: Mon, 03 May 2021 08:14:19 GMT
<= Recv header, 20 bytes (0x14)
0000: Content-Length: 13
<= Recv header, 2 bytes (0x2)
0000: 
<= Recv data, 13 bytes (0xd)
0000: Hello, World!
== Info: Connection #0 to host localhost left intact
Hello, World!

Hiding progress & displaying errors ( -sS )

$ curl -sS http://localhost:8000
Hello, World!

Output format specification ( -w <format> --write-out <format> )

This can be used to check only http_code. Specify in the format %{variable_name}.

I want to hide the response body, so we specify -o /dev/null.

$ curl -w 'http_code: %{http_code}\n' http://localhost:8000/ -sS -o /dev/null
http_code: 200
$ curl -w 'size_download: %{size_download}\n' http://localhost:8000/ -sS -o /dev/null
size_download: 13
$ curl -w 'content_type: %{content_type}\n' http://localhost:8000/ -sS -o /dev/null
content_type: text/plain; charset=UTF-8

Output to file

Download locally ( -O --remote-name )

First, let’s run the program without the -O option.

$ curl http://localhost:8000/test.html
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <p>わくわくBank</p>
</body>
</html>

Try downloading locally with the -O option.

$ curl -O http://localhost:8000/test.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   115  100   115    0     0  57500      0 --:--:-- --:--:-- --:--:-- 57500
$ 
$ 
$ cat test.html 
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <p>わくわくBank</p>
</body>
</html>

Specify output file name ( -o <file> --output <file>)

Output can be made to a specified file.

$ curl -o abc.html http://localhost:8000/test.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   115  100   115    0     0  38333      0 --:--:-- --:--:-- --:--:-- 57500
$ 
$ 
$ cat abc.html 
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <p>わくわくBank</p>
</body>
</html>

Specify HTTP method ( -X <command> --request <command> )

# GET
curl http://localhost:8000/
curl -X GET http://localhost:8000/

# POST
curl -X POST http://localhost:8000/

# PUT
curl -X PUT http://localhost:8000/

# DELETE
curl -X DELETE http://localhost:8000/

data transmission

application/x-www-form-urlencoded
( -d <data> --data <data> )

$ curl -v -X POST http://localhost:8000/ \
> -d 'aaa=111' \
> -d 'bbb=222' \
> -d 'ccc=333'
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying ::1:8000...
* Connected to localhost (::1) port 8000 (#0)
> POST / HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.71.1
> Accept: */*
> Content-Length: 23
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 23 out of 23 bytes
* Mark bundle as not supporting multiuse

(omission)

It can also be specified as follows.

$ curl -v -X POST http://localhost:8000/ \
-d 'aaa=111&bbb=222&ccc=333'

URL encoding + application/x-www-form-urlencoded ( --data-urlencode <data> )

First, check for cases where the -d option is not URL-encoded.

$ curl -X POST http://localhost:8000/ \
> --trace-ascii /dev/stdout \
> --data 'aaa=1 1' \
> --data 'bbb=2%2' \
> --data 'ccc=3&3'
(omission)
0000: aaa=1 1&bbb=2%2&ccc=3&3
(omission)

Next, check the case of URL encoding with the –data-urlencode option.

$ curl -X POST http://localhost:8000/ \
> --trace-ascii /dev/stdout \
> --data-urlencode 'aaa=1 1' \
> --data-urlencode 'bbb=2%2' \
> --data-urlencode 'ccc=3&3'
(omission)
0000: aaa=1%201&bbb=2%252&ccc=3%263
(omission)

multipart/form-data
( -F <name=content>
--form <name=content> )

Upload file.

The -F option sets the Content-Type to multipart/form-data.

$ cat sample.txt 
ABCDEFG
$ 
$ 
$ curl -v -X POST http://localhost:8000/ \
> --trace-ascii /dev/stdout \
> -F 'file=@sample.txt' \
> -F 'aaa=111' \
> -F 'bbb=222'
Warning: --trace-ascii overrides an earlier trace/verbose option
Note: Unnecessary use of -X or --request, POST is already inferred.
== Info:   Trying ::1:8000...
== Info: Connected to localhost (::1) port 8000 (#0)
=> Send header, 186 bytes (0xba)
0000: POST / HTTP/1.1
0011: Host: localhost:8000
0027: User-Agent: curl/7.71.1
0040: Accept: */*
004d: Content-Length: 386
0062: Content-Type: multipart/form-data; boundary=--------------------
00a2: ----d720071bb9a8dd01
00b8: 
=> Send data, 386 bytes (0x182)
0000: --------------------------d720071bb9a8dd01
002c: Content-Disposition: form-data; name="file"; filename="sample.tx
006c: t"
0070: Content-Type: text/plain
008a: 
008c: ABCDEFG.
0096: --------------------------d720071bb9a8dd01
00c2: Content-Disposition: form-data; name="aaa"
00ee: 
00f0: 111
00f5: --------------------------d720071bb9a8dd01
0121: Content-Disposition: form-data; name="bbb"
014d: 
014f: 222
0154: --------------------------d720071bb9a8dd01--
(omission)

request header specification ( -H <header/@file> --header <header/@file> )

You can specify the request header with the -H option.

$ curl -v http://localhost:8000 \
> -H 'Content-Type: application/json' \
> -H 'Referer: http://example.com' \
> -H 'X-Sample: wakuwaku'
*   Trying ::1:8000...
* Connected to localhost (::1) port 8000 (#0)
> GET / HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.71.1
> Accept: */*
> Content-Type: application/json
> Referer: http://example.com
> X-Sample: wakuwaku
(omission)

Cookie

receipt ( -c <filename> )

Adjusted to set cookies on the server side.

Make a request with the -c option to write the cookie to a file called my_cookie.txt.

$ curl -v http://localhost:8000/cookie \
> -c my_cookie.txt
*   Trying ::1:8000...
* Connected to localhost (::1) port 8000 (#0)
> GET /cookie HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.71.1
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Type: text/plain; charset=UTF-8
* Added cookie username=""wakuwaku bank"" for domain localhost, path /, expire 1620124726
< Set-Cookie: username="wakuwaku bank"; Expires=Tue, 04 May 2021 10:38:46 GMT
< Date: Mon, 03 May 2021 10:38:46 GMT
< Content-Length: 13
< 
* Connection #0 to host localhost left intact
Hello, World!

The my_cookie.txt file has been generated. Check the contents.

$ cat my_cookie.txt 
# Netscape HTTP Cookie File
# https://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

localhost       FALSE   /       FALSE   1620124726      username        "wakuwaku bank"

sending ( -b <data|filename> )

Specify the my_cookie.txt file to which the cookie was written earlier as the -b option.

$ curl -v http://localhost:8000/cookie -b my_cookie.txt
*   Trying ::1:8000...
* Connected to localhost (::1) port 8000 (#0)
> GET /cookie HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.71.1
> Accept: */*
> Cookie: username="wakuwaku bank"
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Type: text/plain; charset=UTF-8
* Replaced cookie username=""wakuwaku bank"" for domain localhost, path /, expire 1620124902
< Set-Cookie: username="wakuwaku bank"; Expires=Tue, 04 May 2021 10:41:42 GMT
< Date: Mon, 03 May 2021 10:41:42 GMT
< Content-Length: 13
< 
* Connection #0 to host localhost left intact
Hello, World!

You can see that Cookie: username="wakuwaku bank" is set in the request.

Basic Authentication ( --basic -u <user:password> )

I set up Basic Authentication on the server side. It will be 401 as follows.

$ curl -i http://localhost:8000
HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=UTF-8
Www-Authenticate: basic realm=Restricted
Date: Mon, 03 May 2021 10:30:11 GMT
Content-Length: 27

{"message":"Unauthorized"}

--basic -u <user:password> to pass Basic authentication.

$ curl -i http://localhost:8000 \
> --basic -u yamada:sample_password
HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Date: Mon, 03 May 2021 10:32:45 GMT
Content-Length: 13

Hello, World!

Other Options ( -h )

You can check the list of options with curl -h. There are many.

(base) $ curl -h
Usage: curl [options...] <url>
     --abstract-unix-socket <path> Connect via abstract Unix domain socket
     --alt-svc <file name> Enable alt-svc with this cache file
     --anyauth       Pick any authentication method
 -a, --append        Append to target file when uploading
     --basic         Use HTTP Basic Authentication
     --cacert <file> CA certificate to verify peer against
     --capath <dir>  CA directory to verify peer against
 -E, --cert <certificate[:password]> Client certificate file and password
     --cert-status   Verify the status of the server certificate
     --cert-type <type> Certificate type (DER/PEM/ENG)
     --ciphers <list of ciphers> SSL ciphers to use
     --compressed    Request compressed response
     --compressed-ssh Enable SSH compression
 -K, --config <file> Read config from a file
     --connect-timeout <seconds> Maximum time allowed for connection
     --connect-to <HOST1:PORT1:HOST2:PORT2> Connect to host
 -C, --continue-at <offset> Resumed transfer offset
 -b, --cookie <data|filename> Send cookies from string/file
 -c, --cookie-jar <filename> Write cookies to <filename> after operation
     --create-dirs   Create necessary local directory hierarchy
     --crlf          Convert LF to CRLF in upload
     --crlfile <file> Get a CRL list in PEM format from the given file
 -d, --data <data>   HTTP POST data
     --data-ascii <data> HTTP POST ASCII data
     --data-binary <data> HTTP POST binary data
     --data-raw <data> HTTP POST data, '@' allowed
     --data-urlencode <data> HTTP POST data url encoded
     --delegation <LEVEL> GSS-API delegation permission
     --digest        Use HTTP Digest Authentication
 -q, --disable       Disable .curlrc
     --disable-eprt  Inhibit using EPRT or LPRT
     --disable-epsv  Inhibit using EPSV
     --disallow-username-in-url Disallow username in url
     --dns-interface <interface> Interface to use for DNS requests
     --dns-ipv4-addr <address> IPv4 address to use for DNS requests
     --dns-ipv6-addr <address> IPv6 address to use for DNS requests
     --dns-servers <addresses> DNS server addrs to use
     --doh-url <URL> Resolve host names over DOH
 -D, --dump-header <filename> Write the received headers to <filename>
     --egd-file <file> EGD socket path for random data
     --engine <name> Crypto engine to use
     --etag-compare <file> Pass an ETag from a file as a custom header
     --etag-save <file> Parse ETag from a request and save it to a file
     --expect100-timeout <seconds> How long to wait for 100-continue
 -f, --fail          Fail silently (no output at all) on HTTP errors
     --fail-early    Fail on first transfer error, do not continue
     --false-start   Enable TLS False Start
 -F, --form <name=content> Specify multipart MIME data
     --form-string <name=string> Specify multipart MIME data
     --ftp-account <data> Account data string
     --ftp-alternative-to-user <command> String to replace USER [name]
     --ftp-create-dirs Create the remote dirs if not present
     --ftp-method <method> Control CWD usage
     --ftp-pasv      Use PASV/EPSV instead of PORT
 -P, --ftp-port <address> Use PORT instead of PASV
     --ftp-pret      Send PRET before PASV
     --ftp-skip-pasv-ip Skip the IP address for PASV
     --ftp-ssl-ccc   Send CCC after authenticating
     --ftp-ssl-ccc-mode <active/passive> Set CCC mode
     --ftp-ssl-control Require SSL/TLS for FTP login, clear for transfer
 -G, --get           Put the post data in the URL and use GET
 -g, --globoff       Disable URL sequences and ranges using {} and []
     --happy-eyeballs-timeout-ms <milliseconds> Time for IPv6 before trying IPv4
     --haproxy-protocol Send HAProxy PROXY protocol v1 header
 -I, --head          Show document info only
 -H, --header <header/@file> Pass custom header(s) to server
 -h, --help          This help text
     --hostpubmd5 <md5> Acceptable MD5 hash of the host public key
     --http0.9       Allow HTTP 0.9 responses
 -0, --http1.0       Use HTTP 1.0
     --http1.1       Use HTTP 1.1
     --http2         Use HTTP 2
     --http2-prior-knowledge Use HTTP 2 without HTTP/1.1 Upgrade
     --http3         Use HTTP v3
     --ignore-content-length Ignore the size of the remote resource
 -i, --include       Include protocol response headers in the output
 -k, --insecure      Allow insecure server connections when using SSL
     --interface <name> Use network INTERFACE (or address)
 -4, --ipv4          Resolve names to IPv4 addresses
 -6, --ipv6          Resolve names to IPv6 addresses
 -j, --junk-session-cookies Ignore session cookies read from file
     --keepalive-time <seconds> Interval time for keepalive probes
     --key <key>     Private key file name
     --key-type <type> Private key file type (DER/PEM/ENG)
     --krb <level>   Enable Kerberos with security <level>
     --libcurl <file> Dump libcurl equivalent code of this command line
     --limit-rate <speed> Limit transfer speed to RATE
 -l, --list-only     List only mode
     --local-port <num/range> Force use of RANGE for local port numbers
 -L, --location      Follow redirects
     --location-trusted Like --location, and send auth to other hosts
     --login-options <options> Server login options
     --mail-auth <address> Originator address of the original email
     --mail-from <address> Mail from this address
     --mail-rcpt <address> Mail to this address
     --mail-rcpt-allowfails Allow RCPT TO command to fail for some recipients
 -M, --manual        Display the full manual
     --max-filesize <bytes> Maximum file size to download
     --max-redirs <num> Maximum number of redirects allowed
 -m, --max-time <seconds> Maximum time allowed for the transfer
     --metalink      Process given URLs as metalink XML file
     --negotiate     Use HTTP Negotiate (SPNEGO) authentication
 -n, --netrc         Must read .netrc for user name and password
     --netrc-file <filename> Specify FILE for netrc
     --netrc-optional Use either .netrc or URL
 -:, --next          Make next URL use its separate set of options
     --no-alpn       Disable the ALPN TLS extension
 -N, --no-buffer     Disable buffering of the output stream
     --no-keepalive  Disable TCP keepalive on the connection
     --no-npn        Disable the NPN TLS extension
     --no-progress-meter Do not show the progress meter
     --no-sessionid  Disable SSL session-ID reusing
     --noproxy <no-proxy-list> List of hosts which do not use proxy
     --ntlm          Use HTTP NTLM authentication
     --ntlm-wb       Use HTTP NTLM authentication with winbind
     --oauth2-bearer <token> OAuth 2 Bearer Token
 -o, --output <file> Write to file instead of stdout
 -Z, --parallel      Perform transfers in parallel
     --parallel-immediate Do not wait for multiplexing (with --parallel)
     --parallel-max  Maximum concurrency for parallel transfers
     --pass <phrase> Pass phrase for the private key
     --path-as-is    Do not squash .. sequences in URL path
     --pinnedpubkey <hashes> FILE/HASHES Public key to verify peer against
     --post301       Do not switch to GET after following a 301
     --post302       Do not switch to GET after following a 302
     --post303       Do not switch to GET after following a 303
     --preproxy [protocol://]host[:port] Use this proxy first
 -#, --progress-bar  Display transfer progress as a bar
     --proto <protocols> Enable/disable PROTOCOLS
     --proto-default <protocol> Use PROTOCOL for any URL missing a scheme
     --proto-redir <protocols> Enable/disable PROTOCOLS on redirect
 -x, --proxy [protocol://]host[:port] Use this proxy
     --proxy-anyauth Pick any proxy authentication method
     --proxy-basic   Use Basic authentication on the proxy
     --proxy-cacert <file> CA certificate to verify peer against for proxy
     --proxy-capath <dir> CA directory to verify peer against for proxy
     --proxy-cert <cert[:passwd]> Set client certificate for proxy
     --proxy-cert-type <type> Client certificate type for HTTPS proxy
     --proxy-ciphers <list> SSL ciphers to use for proxy
     --proxy-crlfile <file> Set a CRL list for proxy
     --proxy-digest  Use Digest authentication on the proxy
     --proxy-header <header/@file> Pass custom header(s) to proxy
     --proxy-insecure Do HTTPS proxy connections without verifying the proxy
     --proxy-key <key> Private key for HTTPS proxy
     --proxy-key-type <type> Private key file type for proxy
     --proxy-negotiate Use HTTP Negotiate (SPNEGO) authentication on the proxy
     --proxy-ntlm    Use NTLM authentication on the proxy
     --proxy-pass <phrase> Pass phrase for the private key for HTTPS proxy
     --proxy-pinnedpubkey <hashes> FILE/HASHES public key to verify proxy with
     --proxy-service-name <name> SPNEGO proxy service name
     --proxy-ssl-allow-beast Allow security flaw for interop for HTTPS proxy
     --proxy-tls13-ciphers <ciphersuite list> TLS 1.3 proxy cipher suites
     --proxy-tlsauthtype <type> TLS authentication type for HTTPS proxy
     --proxy-tlspassword <string> TLS password for HTTPS proxy
     --proxy-tlsuser <name> TLS username for HTTPS proxy
     --proxy-tlsv1   Use TLSv1 for HTTPS proxy
 -U, --proxy-user <user:password> Proxy user and password
     --proxy1.0 <host[:port]> Use HTTP/1.0 proxy on given port
 -p, --proxytunnel   Operate through an HTTP proxy tunnel (using CONNECT)
     --pubkey <key>  SSH Public key file name
 -Q, --quote         Send command(s) to server before transfer
     --random-file <file> File for reading random data from
 -r, --range <range> Retrieve only the bytes within RANGE
     --raw           Do HTTP "raw"; no transfer decoding
 -e, --referer <URL> Referrer URL
 -J, --remote-header-name Use the header-provided filename
 -O, --remote-name   Write output to a file named as the remote file
     --remote-name-all Use the remote file name for all URLs
 -R, --remote-time   Set the remote file's time on the local output
 -X, --request <command> Specify request command to use
     --request-target Specify the target for this request
     --resolve <host:port:addr[,addr]...> Resolve the host+port to this address
     --retry <num>   Retry request if transient problems occur
     --retry-all-errors Retry all errors (use with --retry)
     --retry-connrefused Retry on connection refused (use with --retry)
     --retry-delay <seconds> Wait time between retries
     --retry-max-time <seconds> Retry only within this period
     --sasl-authzid <identity> Identity for SASL PLAIN authentication
     --sasl-ir       Enable initial response in SASL authentication
     --service-name <name> SPNEGO service name
 -S, --show-error    Show error even when -s is used
 -s, --silent        Silent mode
     --socks4 <host[:port]> SOCKS4 proxy on given host + port
     --socks4a <host[:port]> SOCKS4a proxy on given host + port
     --socks5 <host[:port]> SOCKS5 proxy on given host + port
     --socks5-basic  Enable username/password auth for SOCKS5 proxies
     --socks5-gssapi Enable GSS-API auth for SOCKS5 proxies
     --socks5-gssapi-nec Compatibility with NEC SOCKS5 server
     --socks5-gssapi-service <name> SOCKS5 proxy service name for GSS-API
     --socks5-hostname <host[:port]> SOCKS5 proxy, pass host name to proxy
 -Y, --speed-limit <speed> Stop transfers slower than this
 -y, --speed-time <seconds> Trigger 'speed-limit' abort after this time
     --ssl           Try SSL/TLS
     --ssl-allow-beast Allow security flaw to improve interop
     --ssl-no-revoke Disable cert revocation checks (Schannel)
     --ssl-reqd      Require SSL/TLS
     --ssl-revoke-best-effort Ignore missing/offline cert CRL dist points
 -2, --sslv2         Use SSLv2
 -3, --sslv3         Use SSLv3
     --stderr        Where to redirect stderr
     --styled-output Enable styled output for HTTP headers
     --suppress-connect-headers Suppress proxy CONNECT response headers
     --tcp-fastopen  Use TCP Fast Open
     --tcp-nodelay   Use the TCP_NODELAY option
 -t, --telnet-option <opt=val> Set telnet option
     --tftp-blksize <value> Set TFTP BLKSIZE option
     --tftp-no-options Do not send any TFTP options
 -z, --time-cond <time> Transfer based on a time condition
     --tls-max <VERSION> Set maximum allowed TLS version
     --tls13-ciphers <ciphersuite list> TLS 1.3 cipher suites to use
     --tlsauthtype <type> TLS authentication type
     --tlspassword   TLS password
     --tlsuser <name> TLS user name
 -1, --tlsv1         Use TLSv1.0 or greater
     --tlsv1.0       Use TLSv1.0 or greater
     --tlsv1.1       Use TLSv1.1 or greater
     --tlsv1.2       Use TLSv1.2 or greater
     --tlsv1.3       Use TLSv1.3 or greater
     --tr-encoding   Request compressed transfer encoding
     --trace <file>  Write a debug trace to FILE
     --trace-ascii <file> Like --trace, but without hex output
     --trace-time    Add time stamps to trace/verbose output
     --unix-socket <path> Connect through this Unix domain socket
 -T, --upload-file <file> Transfer local FILE to destination
     --url <url>     URL to work with
 -B, --use-ascii     Use ASCII/text transfer
 -u, --user <user:password> Server user and password
 -A, --user-agent <name> Send User-Agent <name> to server
 -v, --verbose       Make the operation more talkative
 -V, --version       Show version number and quit
 -w, --write-out <format> Use output FORMAT after completion
     --xattr         Store metadata in extended file attributes

reference

Let's share this post !
TOC