cURL suppress response body

CurlOutputSuppress

Curl Problem Overview


Is it possible instruct cURL to suppress output of response body?

In my case, the response body is an HTML page, which overflows the CLI buffer, making it difficult to find the relevant information. I want to examine the other parts of the output such as HTTP response code, headers, e.t.c. - everything except the actual HTML.

Curl Solutions


Solution 1 - Curl

You can use the -o switch and null pseudo-file :

Unix
curl -s -o /dev/null -v http://google.com
Windows
curl -s -o nul -v http://google.com

Solution 2 - Curl

Here's a way to suppress all curl output and headers, with the option of still showing errors if they occur. Useful for cron jobs or automated testing.

Unix

To suppress all output:

curl --silent --output /dev/null http://example.com

To suppress output but still show errors if they occur:

curl --silent --output /dev/null --show-error --fail http://example.com

Windows

To suppress all output:

curl --silent --output nul http://example.com

To suppress output but still show errors if they occur:

curl --silent --output nul --show-error --fail http://example.com

Parameters Explained

--silent suppresses the download-in-progress stats (but will still show HTML output)
--output /dev/null hides successful output
--show-error shows errors, even when silent mode is enabled
--fail will raise an error if HTTP response is an error code (404, 500 etc.) instead of merely DNS/TCP errors.


UPDATE: I realise the original author wanted to inspect the headers and response code of a request rather than silencing everything. See samael's answer for details on how to do that.

Solution 3 - Curl

When you want to show headers but hide the response body, you'll want to use:

curl -sIXGET http://somedomain.com/your/url

I'd been using curl -I http://somedomain.com/your/url for just showing response headers. The problem with that though is that it makes the request using the HEAD method which is no good when you want to test an API call that only responds to a GET request. This is what the -X GET is for, it changes the request to a GET.

So, in summary:

-s hides the progress bars from output (especially useful when piping to another program)
-I shows headers (but makes a HEAD request)
-XGET converts request back to a GET request

see: http://www.woolie.co.uk/article/curl-full-get-request-dropping-body/

Solution 4 - Curl

Just make a HEAD request. You will get the headers without the body. A standards-compilant server is supposed to send exactly the same information here as it would to a GET request.

curl --head <url>

Alternatively, if a HEAD request doesn't work for you for some reason, the following will make cURL send a GET request but then print response code and headers and drop the connection without receiving the response body -- unlike other answers which receive and then discard it. This can save a lot of time and bandwidth, especially if the body is very large.

curl --head -X GET <url>

You can do likewise with any other verb (e.g. POST) by supplying it to the -X option instead of GET.

Solution 5 - Curl

I would suggest the following solution:

curl -sS -i https://example.com | perl -e '$p = 1; while(<STDIN>){ $p = 0 if $_ =~ /^\s*$/; print if $p }'

It's a longish one-liner but does what you need:

  • the body is suppressed
  • the headers & response codes are output @ stdout, so that you can also pipe the info to another command or capture it in a shell variable like output="$(curl -i ....)"
  • any cURL errors are sent @ stderr
  • this works for both GET & POST requests, as well as for any other HTTP request methods, and you can use the other standard curl arguments

Solution 6 - Curl

Another option to show the response headers and suppress the body:

curl -sD - https://example.com -o /dev/null

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBaltoStarView Question on Stackoverflow
Solution 1 - CurlGilles QuenotView Answer on Stackoverflow
Solution 2 - CurlSimon EastView Answer on Stackoverflow
Solution 3 - CurlsamaelView Answer on Stackoverflow
Solution 4 - Curlivan_pozdeevView Answer on Stackoverflow
Solution 5 - CurlfamzahView Answer on Stackoverflow
Solution 6 - CurlcmbuckleyView Answer on Stackoverflow