6.8 KiB
Curl on Linux - Reference Guide
Curl is a powerful tool that is mainly used to transfer data. It has way more functions, but I won't be able to cover everything. This blog post is mainly a reference for later use and not a step-by-step guide. Therefore I won't cover everything in depth.
Most of it should work on other operating systems too, but I'll use Linux as reference. I'll keep this page up-to-date and add more topics in the future.
General
Side note: put the URL into single or double quotes if it contains special characters.
By default, curl writes the received data to stdout and does not encode or decode received data.
- A quick example to get you public IP:
curl brrl.net/ipcurl -L brrl.net/ip#-Lto get through the HTTP>HTTP if necessary
Saving to disk
You can redirect the content from stdout to another application, save it as a file or download the target file.
- Download content to the file:
curl -L -o myip.txt brrl.net/ip# save your public IP to a file calledmyip.txtin the current directory
If you want to download a file and keep the original name, use the -O (capital 'o') or --remote-name option.
If you want to create a new directory, you can use --create-dirs like this:
curl -L --create-dirs -o path/from/current/dir/myip.txt brrl.net/ip
The permission used is 0750.
Specific interface
You can use the --interface option to use one specific interface. You are free to use the interface name, the IP address, or the hostname.
Specific DNS server
You can choose a specific DNS server with the following option. Multiple DNS servers can be chosen and must be separated by a comma.
--dns-servers 9.9.9.9:53,149.112.112.112:53
Redirects
If you want curl to follow redirects, simply use the -L flag.
Import curl options and targets from the file
Some tasks require many options. To keep it organized, you can import those options from a file with the -K or --config and followed by the name of the file.
- Example:
curl --config curl-options.txt https://example.com
Data tranfer limits
You can set up- and download limits with --limit-rate. The default are bytes/second, and you can use K,M,G,T for Kilo-,Mega-,Giga- and Terabyte, respectively.
--limit-rate 10K
--limit-rate 1000
--limit-rate 10M
Parallel function
To let curl transfer data parallel, you can use the -Z or --parallel and choose --parallel-immediate to start immediately.
-Z --parallel-immediate
The default is 50 parallel transfers but can be set with --parallel-max NUMBER.
Continue downloads automatically
- Unreliable connections are a pain, and you can tell curl to retry and continue downloads:
--retry 999 --retry-max-time 0 -C ---retry 999# retry it 999 times--retry-max-time 0# prevent the default timeout between retries-C -# continue the transfer when you run the command again, and let curl figure out where to continue
Wildcards / Multiple downloads
Side note: make sure to put the full URL into single or double quotes if you work with wildcards and sequences.
Sets
You can tell curl to transfer multiple files by putting the names into curly brac {}
- Keep the original name:
curl -O 'http://{domain1,domain2,domain3}.com'curl -O 'http://domain.com/{uri1,uri2,uri3}'- Rename files:
curl "http://{one,two}.example.com" -o "file_#1.txt"
And you can use multiple sets, as shown in this example:
kuser@pleasejustwork:~/temp/curl$ curl "http://example.com/{1,2}/{3,4}" -o "file_#1_#2.txt"
[1/4]: http://example.com/1/3 --> file_1_3.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1256 100 1256 0 0 6404 0 --:--:-- --:--:-- --:--:-- 6375
[2/4]: http://example.com/1/4 --> file_1_4.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1256 100 1256 0 0 12753 0 --:--:-- --:--:-- --:--:-- 12816
[3/4]: http://example.com/2/3 --> file_2_3.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1256 100 1256 0 0 12765 0 --:--:-- --:--:-- --:--:-- 12816
[4/4]: http://example.com/2/4 --> file_2_4.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1256 100 1256 0 0 12804 0 --:--:-- --:--:-- --:--:-- 12816l
kuser@pleasejustwork:~/temp/curl$ ls
file_1_3.txt file_1_4.txt file_2_3.txt file_2_4.txt
Sequence
- Use
[]for alphanumeric sequences: curl -O 'http://example.com/picture-[1-51].img'curl -O 'http://example.com/attach-[a-z].img'
It works with leading zeros too.
Nested sequences are not supported!
- Adding steps:
curl -O 'http://example.com/picture-[1-50:2].img'# every second picture
Proxies
I am not too familiar with the proxy functions. I normally just use it to download things from Tor.
- If you are connected to Tor, you can reach the network through a SOCKS5 socket:
--socks5-hostname localhost:9150# On Linux--socks5-hostname localhost:9050# Windows or Tor in Browser Bundle- with this addition, you can reach the Tor network via curl.
For normal SOCKS5 sockets, you could simply use --socks5 instead of --socks5-hostname, but with --socks5-hostname, the DNS resolution runs on the proxy.
- The usual syntax for proxies looks like this, according to the manual:
-x, --proxy [protocol://]host[:port]curl --proxy http://proxy.example https://example.comcurl --proxy socks5://proxy.example:12345 https://example.com- Another example of HTTP basic auth proxy:
curl --proxy-basic --proxy-user user:password -x http://proxy.example https://example.com
Authentication
- Example for basic authentication:
curl -u name:password --basic https://example.com- Example with bearer token:
curl http://username:password@example.com/api/ -H "Authorization: Bearer reallysecuretoken"- Example with oauth2 bearer:
curl --oauth2-bearer "mF_9.B5f-4.1JqM" https://example.com- Example with ssh public key authentication:
curl --pass secret --key file https://example.com
What else
And there is so much more, but I'll leave it like that for now. Things I am going to add in the future: HTTP post/get requests, certificates troubleshooting, up- and downloading data through FTP, sftp, etc., mail /SMTP. I am unfamiliar with those, so I'll test a bunch before I add those topics here.
--