Living in the Shell #17; curl (HTTP/S Client) (Part 2)

Living in the Shell #17; curl (HTTP/S Client) (Part 2)

curl 🌐

Makes requests in various protocols, including (but not limited to) HTTP/HTTPS/FTP/FTPS.

Add a custom header to request -H

curl https://postman-echo.com/get -H 'user-agent: curl'

ℹ️ You can set any number of headers by repeating -H options.

Make a POST request with JSON body -d & -X

curl https://postman-echo.com/post \
    -X POST \
    -H 'content-type: application/json' \
    -d '{"key":"value"}'
{
  "args": {},
  "data": {
    "key": "value"
  },
  "files": {},
  "form": {},
  "headers": {
    "x-forwarded-proto": "https",
    "x-forwarded-port": "443",
    "host": "postman-echo.com",
    "x-amzn-trace-id": "Root=1-61ba2f8f-304430e917ea20e7024a87c3",
    "content-length": "15",
    "user-agent": "curl/7.74.0",
    "accept": "*/*",
    "content-type": "application/json"
  },
  "json": {
    "key": "value"
  },
  "url": "https://postman-echo.com/post"
}

Read request body from file -d@

curl https://postman-echo.com/post \
    -X POST \
    -H 'content-type: application/json' \
    -d @data-file.json

Read request headers from file -H@

curl https://postman-echo.com/post \
    -X POST \
    -H @headers-file.txt \
    -d @data-file.json

⚠️ The headers file should be formatted as "key: value" per line.

Make a HEAD request -I

curl -I https://postman-echo.com/get

ℹ️ Alternatively, you can use -X HEAD instead of -I.

See more detailed process logs -v

curl -v https://postman-echo.com/get

This will print more low-level details, including protocol handshakes and negotiations.