在将数据发送到数据库之前检查Internet可用性

Zac*_*oon 5 python python-2.7

我是Python 2.7的新手.我正在编写一个程序,在我继续使用Internet将数据发送到数据库之前,我需要检查我的Wifi的互联网可用性(有时是互联网断开连接).如果没有互联网连接,将跳过向数据库发送数据.我怎样才能做到这一点.这是我这样做的正确方法吗?

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
Run Code Online (Sandbox Code Playgroud)

小智 1

我为此使用了请求模块。

如果出现网络问题(例如 DNS 故障、连接被拒绝等),Requests 将引发 ConnectionError 异常。

所以你可以执行以下操作:

import requests

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

    except requests.exceptions.ConnectionError:
        return False
Run Code Online (Sandbox Code Playgroud)

请注意,它可能会引发其他异常,但这应该足以开始。