我是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
答案 0 :(得分:1)
我已经使用了requests模块。
如果出现网络问题(例如DNS失败,拒绝连接等),请求将引发ConnectionError异常。
所以你可以做到以下几点:
lines
请注意,它可能引发其他异常,但这应该足以启动。
答案 1 :(得分:0)
正如@FranciscoCouzo所建议的,您可以尝试连接,看看会发生什么。但是假设您想要在深入研究代码的数据库部分之前进行更小的健全性检查。如果您知道数据库服务器的端口号(例如1433),则可以尝试连接,然后重置该连接。当你工作时,你仍然需要处理失去你的wifi连接,但这是一个轻量级的方式,知道它可以开始。
import socket
import struct
def is_alive(host, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.settimeout(5)
s.connect((host, port))
s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER,
struct.pack("ii", 1, 0))
s.close()
except OSError:
return False
finally:
s.close()
return True
print(is_alive("example.com", 1344))