2

我已经实现了一个快速的解决方案来检查一个 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"

它运行良好一次,如果我尝试一次,则表明我没有连接。但是如果我重新建立连接并重试,那么它仍然说我没有连接。

urllib2 连接是否未以某种方式关闭?我应该做些什么来重置它吗?

4

3 回答 3

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”的定义,它应该可以工作。

如果您想了解编译指示,这里有一个很好的讨论:编译指示和缓存控制标头之间的区别?

于 2013-07-03T06:14:46.593 回答
0

只发出 HEAD 请求会更快,因此不会获取 HTML。
我也相信谷歌会更喜欢这种方式:)

# uncomment for python2
# import httplib
import http.client as httplib

def have_internet():
    conn = httplib.HTTPConnection("www.google.com")
    try:
        conn.request("HEAD", "/")
        return True
    except:
        return False
于 2015-04-24T17:53:08.673 回答
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 连接的代码,它可以工作。

于 2013-07-03T06:04:21.787 回答