Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get page output with curl --fail

Calling curl without parameters, i get the page output, even with an http status code = 404:

$ curl http://www.google.com/linux; <!DOCTYPE html> <html lang=en>   <meta charset=utf-8>   <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">   <title>Error 404 (Not Found)!!1</title>   <style>     *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/errors/logo_sm_2.png) no-repeat}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/errors/logo_sm_2_hr.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/errors/logo_sm_2_hr.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/errors/logo_sm_2_hr.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:55px;width:150px}   </style>   <a href=//www.google.com/><span id=logo aria-label=Google></span></a>   <p><b>404.</b> <ins>That’s an error.</ins>   <p>The requested URL <code>/linux</code> was not found on this server.  <ins>That’s all we know.</ins>  $ echo $?; 0 

The status code is 0.

Calling it with --fail will not show the output:

$ curl --fail http://www.google.com/linux; curl: (22) The requested URL returned error: 404 Not Found  $ echo $?; 22 

The status code is 22 now ...

Id' like to get the output even when http status = 404, 500 (like the first curl execution) and, at the same time, get a different system error (like in the second curl execution, $? = 22). Is it possible with curl? If not, how could I achieve this with another tool (this tool must accept file uploads e post data! wget doesn't seems to be an alternative ...)

Thanks.

like image 386
Thom Thom Thom Avatar asked Mar 19 '14 12:03

Thom Thom Thom


People also ask

What does curl -- fail mean?

The --fail option has turned out to be a surprisingly popular option but users have often repeated the request to also make it possible to get the body stored. --fail makes curl stop immediately after having received the response headers – if the response code says so.

How do you ignore curl output?

The curl command with the -o /dev/null option can be used to suppress the response body output. Something like this should be displayed. If you also want to supress the progress bar, the -s or --silent flag can be used. Now the curl command returns no output.

What is curl silent mode?

Make curl silent Silent or quiet mode. Don't show progress meter or error messages. Makes Curl mute. It will still output the data you ask for, potentially even to the terminal/stdout unless you redirect it. Try it out: curl http://example.com --output my.file --silent.


1 Answers

First of all the maximum value for the error code(or exit code) is 255. Here is the reference.

Also, the --fail will not allow you to do what you are looking for. However, you can use alternate ways(writing a shell script) to handle the scenario, but not sure it will be effective or not for you!

http_code=$(curl -s -o out.html -w '%{http_code}'  http://www.google.com/linux;)  if [[ $http_code -eq 200 ]]; then     exit 0 fi  ## decide which status you want to return for 404 or 500 exit  204 

Now do the $? and you'll get the exit code from there.

You'll find the response html inside the out.html file.

You can also pass the url to the script as commandline argument. Check here.

like image 53
Sabuj Hassan Avatar answered Oct 02 '22 11:10

Sabuj Hassan