CURL 8.3 released: tool to transfer data from or to a server
curl is a tool to transfer data from or to a server, using one of the supported protocols (HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP, or FILE). The command is designed to work without user interaction.
curl offers proxy support, user authentication, FTP uploading, HTTP posting, SSL connections, cookies, file transfer resume, Metalink, and many other features.
CURL 8.3 released.
Changelog
Changes:
- curl: make %output{} in -w specify a file to write to
- gskit: remove
- lib: –disable-bindlocal builds curl without local binding support
- nss: remove support for this TLS library
- tool: add “variable” support
- trace: make tracing available in non-debug builds
- url: change default value for CURLOPT_MAXREDIRS to 30
- urlapi: CURLU_PUNY2IDN – convert from punycode to IDN name
- wolfssl: support loading system CA certificates
Bugfixes:
- altsvc: accept and parse IPv6 addresses in response headers
- asyn-ares: reduce timeout to 2000ms
- aws-sigv4: canonicalize the query
- aws-sigv4: fix having date header twice in some cases
- aws-sigv4: handle no-value user header entries
- bearssl: don’t load CA certs when peer verification is disabled
- bearssl: handshake fix, provide proper get_select_socks() implementation
- build: fix portability of mancheck and checksrc targets
- build: streamline non-UWP wincrypt detections
- c-hyper: adjust the hyper to curlcode conversion
- c-hyper: fix memory leaks in `Curl_http`
- cf-haproxy: make CURLOPT_HAPROXY_CLIENT_IP set the *source* IP
- cf-socket: log successful interface bind
- CI/cirrus: disable python install on FreeBSD
- CI: add a 32-bit i686 Linux build
- CI: add caching to many jobs
- CI: move on to ngtcp2 v0.19.1
- CI: move the Alpine build from Cirrus to GHA
- CI: ngtcp2-linux: use separate caches for tls libraries
- CI: remove Windows builds from Cirrus, without replacement
- CI: switch macOS ARM build from Cirrus to Circle CI
- CI: use master again for wolfssl
- More…
Download
How to use curl
Basic GET
GET a single resource via its URI
The default operation is a GET:
curl http://api.example.com:8080/statuses/1234
GET multiple resources where IDs are in a range
Use square brackets with a dashed range:
curl http://api.example.com:8080/items/[1230-1234]
GET multiple resources where IDs aren’t in a range
Use curly braces with comma-delimited strings:
curl http://api.example.com:8080/products/{abc,def,ghi}/status
Using HTTP Headers
Accept only the application/json content-type
Use the header option: -H or –header
curl -H 'Accept: application/json' http://api.example.com:8080/items/1234
Add multiple headers
Use multiple -H options:
curl -H ‘Accept: application/json’ -H ‘Accept-Encoding: gzip’ http://api.example.com:8080/products/a1b2c3ef/status
Note: the output from this is likely to be unreadable because it’s gzipped!
More likely you’d use this with ETags:
curl -H ‘Accept: application/json’ -H ‘If-None-Match: “1cc044-172-3d9aee80″‘ http://api.example.com:8080/products/a1b2c3ef/status
Show the network and HTTP “conversation”
Use the verbose option: -v or –verbose
curl -v -H http://api.example.com
POST and PUT
POST data to a URI
To send data to the server, you use either POST or PUT, depending on what the API requires. To do a POST, you simply use the -d (–data) with some content:
curl -d "name=Ted" http://api.example.com:8080/customers
Note that this uses application/x-www-form-urlencoded as the Content-Type, i.e.,as if it was submitted by an HTML Form. You can use multiple -d options, which will be combined, e.g., these two commands produce the same content:
curl -d “first=Ted” -d “last=Young” http://api.example.com:8080/customers
curl -d “first=Ted&last=Young” http://api.example.com:8080/customers
If you want to send JSON, you’ll need to specify the Content-Type explicitly using the -H (header) option:
curl -d '{"name": "Ted"}' -H 'Content-Type: application/json' http://api.example.com:8080/items
PUT data to a URI
If you need to use the PUT method, you’ll need to override the method with the -X (–request) option:
curl -X PUT -d ‘{“name”: “Ted”}’ -H ‘Content-Type: application/json’ http://api.example.com:8080/items/1234