cURL
curl
command can be used to query urls from the command lines, and also allows sending form data, saving reponses to files etc.
curl https://www.google.com
will return the entire html data of google.com
curl https://reqres.in/api/users/2
demonstrates how to test a REST API with curl. It returns the following json data (the returned data is not automatically formated)
{
"data": {
"id": 2,
"email": "janet.weaver@reqres.in",
"first_name": "Janet",
"last_name": "Weaver",
"avatar": "https://reqres.in/img/faces/2-image.jpg"
},
"support": {
"url": "https://reqres.in/#support-heading",
"text": "To keep ReqRes free, contributions towards server costs are appreciated!"
}
}
Adding the -i
flag will print the response header as well curl -i https://reqres.in/api/users/2
(the raw output is pasted below)
HTTP/1.1 200 OK
Date: Thu, 01 Jul 2021 18:22:07 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 280
Connection: keep-alive
X-Powered-By: Express
Access-Control-Allow-Origin: *
Etag: W/"118-pbdwwFo9SKNhD3Lx5iHJyngpq00"
Via: 1.1 vegur
Cache-Control: max-age=14400
CF-Cache-Status: HIT
Age: 132
Accept-Ranges: bytes
cf-request-id: 0b04e799f100004b17879e8000000001
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v2?s=T6JBJVWbubBKy8LHXsP8NEX2Ogo%2F3M%2Bmaj1Y%2Bq8XK5IrEPZ3BrT6owkPwWuNNHtL5HIBr21Eu4TR7eXFxfFjd%2BreTNZvzogCjq%2FQNJ7LS%2B%2BOQKgknh5p"}],"group":"cf-nel","max_age":604800}
NEL: {"report_to":"cf-nel","max_age":604800}
Server: cloudflare
CF-RAY: 6681a86fea034b17-HYD
alt-svc: h3-27=":443"; ma=86400, h3-28=":443"; ma=86400, h3-29=":443"; ma=86400, h3=":443"; ma=86400
{"data":{"id":2,"email":"janet.weaver@reqres.in","first_name":"Janet","last_name":"Weaver","avatar":"https://reqres.in/img/faces/2-image.jpg"},"support":{"url":"https://reqres.in/#support-heading","text":"To keep ReqRes free, contributions towards server costs are appreciated!"}}
-i
is a shorthand for --include
Data can be posted using the -d
flag which is shorthand for --data
.
curl -d "key1=value1&key2=value2" https://jsonplaceholder.typicode.com/posts
returns and prints
{
"key1": "value1",
"key2": "value2",
"id": 101
}
This uses the POST method by default.
To update the data, we add the -X PUT
flag as curl -X PUT -d "key1=value1&key2=value2" https://jsonplaceholder.typicode.com/posts/1
which returns and prints
{
"key1": "value1",
"key2": "value2",
"id": 101
}
To delete data, use -X DELETE
as curl -X DELETE https://jsonplaceholder.typicode.com/posts/1
Authentication for username and password can be done with the -u
flag in the format curl -u username:password site_address
. The username and password are separated by a :
.
Binary data can be downloaded with the -o
flag which is short for --output
. curl -o test.jpg https://www.python.org/static/apple-touch-icon-144x144-precomposed.png
will download a wallpaper image file and save it as test.jpg
Using a captial -O
instead will save the file to the same name as the one with which its hosted online curl -O https://www.python.org/static/apple-touch-icon-144x144-precomposed.png
saves the file to the location apple-touch-icon-144x144-precomposed.png
.
curl -o test.json https://reqres.in/api/users/2
will save the response to a file test.json
.