我已经实现了一个快速的解决方案来检查一个python程序中的互联网连接,使用我在SO上找到的东西:
def check_internet(self):
try:
response=urllib2.urlopen('http://www.google.com',timeout=2)
print "you are connected"
return True
except urllib2.URLError as err:
print err
print "you are disconnected"
它在ONCE上运行良好,并且如果我尝试一次,则显示我没有连接。但是,如果我重新建立连接并重试,那么它仍然说我没有连接。
urllib2连接是否以某种方式未关闭?我应该做些什么来重置它吗?
答案 0 :(得分:3)
这可能是因为服务器端缓存。
试试这个:
def check_internet(self):
try:
header = {"pragma" : "no-cache"} # Tells the server to send fresh copy
req = urllib2.Request("http://www.google.com", headers=header)
response=urllib2.urlopen(req,timeout=2)
print "you are connected"
return True
except urllib2.URLError as err:
print err
我还没有测试过。但根据“pragma”的定义,它应该有效。
如果你想了解pragma:Difference between Pragma and Cache-control headers?
,这里有一个很好的讨论答案 1 :(得分:0)
这就是我用来检查我的某个应用程序的连接的方法。
import httplib
import socket
test_con_url = "www.google.com" # For connection testing
test_con_resouce = "/intl/en/policies/privacy/" # may change in future
test_con = httplib.HTTPConnection(test_con_url) # create a connection
try:
test_con.request("GET", test_con_resouce) # do a GET request
response = test_con.getresponse()
except httplib.ResponseNotReady as e:
print "Improper connection state"
except socket.gaierror as e:
print "Not connected"
else:
print "Connected"
test_con.close()
我测试了重复启用/禁用LAN连接的代码并且它可以正常工作。
答案 2 :(得分:0)
发出HEAD请求会更快,因此不会获取HTML 此外,我相信谷歌会更喜欢这样:)
import httplib def have_internet(): conn = httplib.HTTPConnection("www.google.com") try: conn.request("HEAD", "/") return True except: return False