Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check internet availability before sending the data to database

I am new to Python 2.7. I am writing a program where I need to check the availability of internet for my Wifi (sometimes the internet disconnects) before I proceed to send the data to the database using the Internet. The send data to database will be skipped if there is no internet connection. How can I do that. Is this the correct way that I doing this?

import urllib                                                        
#Perhaps check internet availability first                               
try:
    import httplib
except:
    import http.client as httplib

def have_internet():
    conn = httplib.HTTPConnection("www.google.com", timeout=5)
    try:
        conn.request("HEAD", "/")
        conn.close()
        return True
    except:
        conn.close()
        return False


#send data to database
data = {'date':date_mmddyyyy,'time':time_hhmmss,'airtemperature':temperature_c,'humidity':humidity_c, 'watertemperature':watertemp_c, 'phsolution':pHvalue_c, 'waterlevel':distance_c, 'CO2 concentration':CO2_c, 'TDS value':tds_c}
result = firebase.put('Region 1', 'Parameter Reading', {'date':date_mmddyyyy,'time':time_hhmmss,'airtemperature':temperature_c,'humidity':humidity_c, 'watertemperature':watertemp_c, 'phsolution':pHvalue_c, 'waterlevel':distance_c, 'CO2 concentration':CO2_c, 'TDS value':tds_c})
result2 = requests.post(firebase_url + '/' + reading_location + '/History/Parameter Reading.json', data=json.dumps(data))     
print 'All parameter records are inserted.\nResult Code = ' + str(result2.status_code) + ',' + result2.text
like image 514
Zack Choon Avatar asked Nov 08 '22 08:11

Zack Choon


1 Answers

I've used the requests module for this.

In the event of a network problem (e.g. DNS failure, refused connection, etc), Requests will raise a ConnectionError exception.

So you could do the following:

import requests

def is_connected():
    try:
        r = requests.get("http://google.com", timeout=5)
        return True

    except requests.exceptions.ConnectionError:
        return False

Note that it may raise other exceptions, but this should be enough to start.

like image 66
krnilo Avatar answered Nov 13 '22 05:11

krnilo