Python:检查互联网连接(不止一次)

时间:2013-07-03 05:29:14

标签: python networking

我已经实现了一个快速的解决方案来检查一个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连接是否以某种方式未关闭?我应该做些什么来重置它吗?

3 个答案:

答案 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