5

我有这个非常简单的代码来检查网站是启动还是关闭。

import httplib2
h = httplib2.Http()
response, content = h.request("http://www.folksdhhkjd.com")
if response.status == 200:
    print "Site is Up"
else:
    print "Site is down"

当我输入一个有效的 URL 时,它会正确打印 Site is Up,因为状态为 200,正如预期的那样。但是,当我输入一个无效的 URL 时,它不应该打印站点已关闭吗?相反,它会打印一个类似这样的异常

Traceback (most recent call last):
  File "C:\Documents and Settings\kripya\Desktop\1.py", line 3, in <module>
    response, content = h.request("http://www.folksdhhkjd.com")
  File "C:\Python27\lib\site-packages\httplib2\__init__.py", line 1436, in request
    (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
  File "C:\Python27\lib\site-packages\httplib2\__init__.py", line 1188, in _request
    (response, content) = self._conn_request(conn, request_uri, method, body, headers)
  File "C:\Python27\lib\site-packages\httplib2\__init__.py", line 1129, in _conn_request
    raise ServerNotFoundError("Unable to find the server at %s" % conn.host)
ServerNotFoundError: Unable to find the server at www.folksdhhkjd.com

如何覆盖此异常并打印我自定义的“站点已关闭”消息?请问有什么指导吗?

编辑

还有一个问题......使用之间有什么区别

h = httplib2.Http('.cache')   

h = httplib2.Http()   
4

2 回答 2

7
try:
    response, content = h.request("http://www.folksdhhkjd.com")
    if response.status==200:
        print "Site is Up"
except httplib2.ServerNotFoundError:
    print "Site is Down"

您的代码的问题是,如果主机没有响应,则请求不会返回任何状态代码,因此库会引发错误(我认为这是库本身的特性,之前进行了某种 DNS 解析试图提出请求)。

于 2011-07-20T05:14:19.500 回答
4
h = httplib2.Http('.cache')   

将它检索到的内容缓存在一个名为的目录中,.cache因此如果您两次执行相同的请求,它可能不必实际获取所有内容两次;以点开头的文件隐藏在 POSIX 文件系统中(如在 Linux 上)。

h = httplib2.Http()

不缓存它的结果,所以你每次都必须得到所有请求的东西。

于 2011-07-20T05:21:47.423 回答