curl
Common Options
-#, --progress-bar Make curl display a simple progress bar instead of the more informational standard meter.
-b, --cookie <name=data> Supply cookie with request. If no =, then specifies the cookie file to use (see -c).
-c, --cookie-jar <file name> File to save response cookies to.
-d, --data <data> Send specified data in POST request, makes -X POST redundant.
-f, --fail Fail silently (don’t output HTML error form if returned).
-F, --form <name=content> Submit form data.
-g, --globoff use it when your URL includes []{}
-H, --header <header> Headers to supply with request.
-i, --include Include HTTP headers in the output.
-I, --head Fetch headers only.
-k, --insecure Allow insecure connections to succeed, i.e. ignore SSL/TLS errors.
-L, --location Follow redirects.
-o, --output <file> Write output to
-O, --remote-name Write output to file named like the remote file (only writes to current directory).
-s, --silent Silent (quiet) mode, no progress bar displayed. Use with -S to force it to show errors.
-T, --upload-file <file> transfers the specified local file to the remote URL.
-v, --verbose Provide more information (useful for debugging).
-w, --write-out <format> Make curl display information on stdout after a completed transfer. See man page for more details on available variables. Convenient way to force curl to append a newline to output: -w "\n" (can add to ~/.curlrc).
-X, --request The request method to use.
http post / put
Specify the request type:
-X POST- is assumed and can be omitted-X PUT
Specify the Content-Type header as one of:
-H "Content-Type: application/x-www-form-urlencoded"-H "Content-Type: application/json"
Add the corresponding payload:
-d "param1=value1¶m2=value2"or-d @data.txt-d '{"key1":"value1", "key2":"value2"}'or-d @data.json
File data.txt:
param1=value1¶m2=value2
File data.json:
{
"key1":"value1",
"key2":"value2"
}
Examples
http post application/x-www-form-urlencoded
application/x-www-form-urlencoded is the default, -X POST implied when -d is used:
curl -d "param1=value1¶m2=value2" http://localhost:3000/data
explicit:
curl -d "param1=value1¶m2=value2" \
-H "Content-Type: application/x-www-form-urlencoded" \
http://localhost:3000/data
from a data file:
curl -d "@data.txt" http://localhost:3000/data
http post application/json
curl -d '{"key1":"value1", "key2":"value2"}' \
-H "Content-Type: application/json" \
http://localhost:3000/data
from a data file:
curl -d "@data.json" http://localhost:3000/data
smb
Given that curl only supports SMB protocol version 1, the following is pretty much useless.
Download a file from the SMB server:
curl -u "domain\username:passwd" smb://server.example.com/share/file.txt
Upload a file to the SMB server:
curl -T file.txt -u "domain\username:passwd" smb://server.example.com/share/
ssh
Get a file from an SSH server using SCP using a (not password-protected) private key to authenticate:
curl -u username: --key ~/.ssh/id_rsa scp://example.com/~/file.txt
Get a file from an SSH server using SCP using a (password-protected) private key to authenticate:
curl -u username: --key ~/.ssh/id_rsa --pass private_key_password \
scp://example.com/~/file.txt