http-headers headers - Getting only response header from HTTP POST using curl
php show (6)
The other answers require the response body to be downloaded. But there's a way to make a POST request that will only fetch the header:
curl -s -I -X POST http://www.google.com
-I by itself performs a HEAD request which can be overridden by
-X POST to perform a POST (or any other) request and still only get the header data.
One can request only the headers using HTTP HEAD, as option
$ curl -I /
Lengthy HTML response bodies are a pain to get in command-line, so I'd like to get only the header as feedback for my POST requests. However, HEAD and POST are two different methods.
How do I get curl to display only response headers to a POST request?
While the other answers have not worked for me in all situations, the best solution I could find (working with
POST as well), taken from here:
curl -vs 'https://some-site.com' 1> /dev/null
Much easier – this is what I use to avoid Shortlink tracking – is the following:
curl -IL http://bit.ly/in-the-shadows
…which also follows links.
-D, --dump-header <file> Write the protocol headers to the specified file. This option is handy to use when you want to store the headers that a HTTP site sends to you. Cookies from the headers could then be read in a second curl invocation by using the -b, --cookie option! The -c, --cookie-jar option is however a better way to store cookies.
-S, --show-error When used with -s, --silent, it makes curl show an error message if it fails.
-L/--location (HTTP/HTTPS) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code), this option will make curl redo the request on the new place. If used together with -i/--include or -I/--head, headers from all requested pages will be shown. When authentication is used, curl only sends its credentials to the initial host. If a redirect takes curl to a different host, it won’t be able to intercept the user+password. See also --location-trusted on how to change this. You can limit the amount of redirects to follow by using the --max-redirs option. When curl follows a redirect and the request is not a plain GET (for example POST or PUT), it will do the following request with a GET if the HTTP response was 301, 302, or 303. If the response code was any other 3xx code, curl will re-send the following request using the same unmodified method.
from the man page. so
curl -sSL -D - www.acooke.org -o /dev/null
follows redirects, dumps the headers to stdout and sends the data to /dev/null (that's a GET, not a POST, but you can do the same thing with a POST - just add whatever option you're already using for POSTing data)
- after the
-D which indicates that the output "file" is stdout.
The Following command displays extra informations
curl -X POST http://httpbin.org/post -vvv > /dev/null
You can ask server to send just HEAD, instead of full response
curl -X HEAD -I http://httpbin.org/
Note: Some incorrectly configured/programmed web servers might response different then the post because it is a HEAD request not POST. But works most of the time
Modifying, or more correctly, adding additional HTTP headers is a great code debugging tool if nothing else.
When a URL request returns a redirect or an image there is no html "page" to temporarily write the results of debug code to - at least not one that is visible in a browser.
One approach is to write the data to a local log file and view that file later. Another is to temporarily add HTTP headers reflecting the data and variables being debugged.
I regularly add extra HTTP headers like X-fubar-somevar: or X-testing-someresult: to test things out - and have found a lot of bugs that would have otherwise been very difficult to trace.