user319862
user319862

Reputation: 1857

Curl suppress output when supplying header

This suppresses the output and just outputs the status:

curl --write-out '%{http_code}' --silent --output /dev/null --noproxy '*' http://www.google.com/

Adding a header makes the entire response print:

curl --write-out '%{http_code}' --silent --output /dev/null --noproxy '*' --header ''"'"'Host:' '192.168.0.1:2345'"'" http://www.google.com/

How can I stop the output printing to stdout when injecting a header?

Upvotes: 0

Views: 3251

Answers (1)

oguz ismail
oguz ismail

Reputation: 50750

Let's take a closer look at your command. Below invocation will write each separate argument in a new line.

$ printf '%q\n' curl --write-out '%{http_code}' --silent --output /dev/null --noproxy '*' --header ''"'"'Host:' '192.168.0.1:2345'"'" http://www.google.com/
curl
--write-out
%\{http_code\}
--silent
--output
/dev/null
--noproxy
\*
--header
\'Host:
192.168.0.1:2345\'
http://www.google.com/

Bingo, though Host: 192.168.0.1:2345 must be a single argument, you're providing it to curl as two separate arguments, so it tries to fetch 192.168.0.1:2345' first. And since --output is applied to only one URL, the response from http://www.google.com/ is printed.

Do it like this and it'll work.

curl --write-out '%{http_code}\n' --silent --output /dev/null --noproxy '*' --header 'Host: 192.168.0.1:2345' http://www.google.com/

Upvotes: 2

Related Questions