Another crucial method not mentioned here is using the same TCP connection for multiple HTTP requests, and exactly one curl command for this.
This is very useful to save network bandwidth, client and server resources, and overall the need of using multiple curl commands, as curl by default closes the connection when end of command is reached.
Keeping the connection open and reusing it is very common for standard clients running a web-app.
Starting curl version 7.36.0, the --next
or -:
command-line option allows to chain multiple requests, and usable both in command-line and scripting.
For example:
- Sending multiple requests on the same TCP connection:
curl http://example.com/?update_=1 -: http://example.com/foo
- Sending multiple different HTTP requests on the same connection:
curl http://example.com/?update_=1 -: -d "I am posting this string" http://example.com/?update_=2
- Sending multiple HTTP requests with different curl options for each request:
curl -o 'my_output_file' http://example.com/?update_=1 -: -d "my_data" -s -m 10 http://example.com/foo -: -o /dev/null http://example.com/random
From the curl manpage:
-:, --next
Tells curl to use a separate operation for the following URL and
associated options. This allows you to send several URL requests, each
with their own specific options, for example, such as different user
names or custom requests for each.
-:
, --next
will reset all local options and only global ones will have their values survive over to the operation following the -:, --next
instruction. Global options include -v, --verbose, --trace,
--trace-ascii and --fail-early.
For example, you can do both a GET and a POST in a single command
line:
curl www1.example.com --next -d postthis www2.example.com
Added in 7.36.0.