Using curl to make a HEAD request with a hard timeout
15,448
curl -I
will generate a HEAD request.
Adding the -L
option will make it follow redirects.
Timeouts can be controlled with several options depending on which bit of the request you want to time out.
From the man page:
--connect-timeout <seconds>
Maximum time in seconds that you allow the connection to the server to take. This only limits the connection phase, once curl has connected this option is of no more use. See also the -m/--max-time option.
-m/--max-time <seconds>
Maximum time in seconds that you allow the whole operation to take. This is useful for preventing your batch jobs from hanging for hours due to slow networks or links going down. See also the --connect-timeout option.
Another couple of timeout-related options also worth looking at are:
--retry
--retry-delay
--retry-max-time
Related videos on Youtube
Author by
AbdelKh
Updated on September 18, 2022Comments
-
AbdelKh over 1 year
I'd like to use
curl
to send a HTTP HEAD request to a URL to verify that it is working correctly (server is up and sends a successful response). At the end, I need the final HTTP response code returned and URL (after following any redirects). Finally, I need to set a hard timeout (a period of time after which the call will fail, regardless of where in the requestcurl
is).Does
curl
support all this? What options do I need to use to accomplish this? -
AbdelKh over 12 yearsThanks, what about retrieving the final URL and response code?
-
Ladadadada over 12 yearsThe final URL will be the value of the
Location:
header of the previous response. The final response code is returned normally. Chaining all of these together with grep would look a bit like this:curl -s -I -L -m 4 http://example.com | grep -E "^Location|^HTTP" | tail -2
. The-s
option stops curl printing out the download progress.tail -2
restricts the output to just the final Location header and the final HTTP response code.