Python httplib2 处理异常
我有一段非常简单的代码,用来检查一个网站是在线还是离线。
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"
当我输入一个有效的网址时,它会正确地显示“网站在线”,因为状态码是200,正如我预期的那样。但是,当我输入一个无效的网址时,难道不应该显示“网站离线”吗?结果却显示了一个异常,内容大概是这样的:
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()
有什么区别呢?
2 个回答
4
h = httplib2.Http('.cache')
它会把获取到的内容存储在一个叫做 .cache
的文件夹里,这样如果你两次请求相同的内容,它就不需要每次都重新获取所有东西。以点开头的文件在POSIX文件系统中是隐藏的(比如在Linux上)。
h = httplib2.Http()
它不保存结果,所以每次你请求的内容都得重新获取一遍。
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解析)。