wget - Only save if return code is 200, delete otherwise

12,797

This code snippet should point your at right direction:

wget --server-response 78.47.35.18/ip-raw.php -O ip-current 2>&1| grep -c 'HTTP/1.1 200 OK'
1
is_200_ok=$(wget --server-response 78.47.35.18/ip-raw.php -O ip-current 2>&1| grep -c 'HTTP/1.1 200 OK')

echo $is_200_ok 
1

However i would use python or perl for this. It would be easier.

How it will look in your script:

#!/bin/bash

rm -f ip-current /tmp/ip-message-temp
touch ip-old

is_200_ok=$(wget --server-response 78.47.35.18/ip-blabl.php -O ip-tmp 2>&1| grep -c 'HTTP/1.1 200 OK')

if [ $is_200_ok == 1 ]; then
    mv ip-tmp ip-current
    echo "YES"
else
    echo "Got error instead of IP address :("
    exit 1
fi

Also avoid write dirrectly to syslog, it's much better to use logger:

NAME
 logger — a shell command interface to the syslog(3) system log module
Share:
12,797

Related videos on Youtube

patriot
Author by

patriot

Updated on September 18, 2022

Comments

  • patriot
    patriot over 1 year

    I have a script that checks my public ip address every few minutes.
    The problem is the ISP sometimes gives me cached pages (I know, I've used all the related args in wget, the isp is formed by a bunch of incompetent so-and-sos that apparently made their own super-efficient cache server) or error pages made by my own router.
    And as a result wget saves the error page when it should save my ip address.

    EDIT:
    what I'm using to detect changes in ip address
    http://paste.debian.net/292602/

    • Michael Hampton
      Michael Hampton almost 9 years
      This doesn't make sense. wget already doesn't save error pages by default. Also, have you tried a different service to obtain your public IP address? Coincidentally I am currently building one, which you can find at myip.addr.space/help . I try to set the right cache-control headers, so it ought to pass through an ISP's proxy.
    • patriot
      patriot almost 9 years
      @MichaelHampton I wrote my own 78.47.35.18/ip-raw.php, it's a one liner <?php echo $_SERVER["REMOTE_ADDR"]; ?>
    • patriot
      patriot almost 9 years
      @MichaelHampton nice domain, that must have cost a lot.
    • patriot
      patriot almost 9 years
      Different responses based on user agent. Is that a good idea? And I'm using my own because I figured no one wants me fetch my ip every 60 seconds.
    • Michael Hampton
      Michael Hampton almost 9 years
      Only for the home page, if you load /ip you will always get raw text.
    • patriot
      patriot almost 9 years
      @MichaelHampton Could my problem be caused by using the -O option with wget? the manpage says it's the same as using >
    • Michael Hampton
      Michael Hampton almost 9 years
      Right, if you use -O, the file is always created (empty) even if there is an error downloading.
    • patriot
      patriot almost 9 years
      that's the problem, it's not empty. Instead it's a long error page.
    • patriot
      patriot almost 9 years
  • patriot
    patriot almost 9 years
    Thank you, nice method. Michael Hampton helped me solve the problem in chat earlier. the solution was to change a flag in my router nvram and use --max-redirect 0
  • Navern
    Navern almost 9 years
    Ok, then:) i will edit my answer.
  • loretoparisi
    loretoparisi over 5 years
    I have slightly changed to matching part to grep -c '200 OK') because in case of redirection the output is slightly different like here is_200_ok=$(wget "https://github.com/stopwords-iso/stopwords-de/blob/master/s‌​topwords-de.txt?raw=‌​true" -O "stopwords_de_tmp.txt" 2>&1| grep -c '200 OK')