繁体   English   中英

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

[英]Check internet availability before sending the data to database

我是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

我已经使用了请求模块。

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

所以你可以做到以下几点:

import requests

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

    except requests.exceptions.ConnectionError:
        return False

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

正如@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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM