HTTP请求超时
在Python 2.6中,httplib.HTTPConnection类新增了一个“超时”参数:http://docs.python.org/library/httplib.html#httplib.HTTPConnection
不过,这个超时参数只是用来设置与服务器连接的时间限制。我想要的是为请求设置一个超时值,而不是连接的超时。看起来httplib并不支持这个功能。
有没有什么办法可以模拟这种行为呢?
4 个回答
5
你也可以在连接的套接字上使用 settimeout
(这个方法在 Python 2.5 中可以用):
connection = HTTPConnection('slow.service.com')
connection.request(...)
connection.sock.settimeout(5.0)
response = connection.getresponse()
response.read()
connection.close()
如果服务器在 5 秒内没有发送回应,就会出现一个 socket.error
的错误。
9
你可以设置一个全局的套接字超时时间 (*):
import socket
timeout = 10
socket.setdefaulttimeout(timeout)
(*) 补充说明: 正如评论中提到的,这在技术上是正确的,但它只有在涉及单个套接字操作的任务中才会有可预测的结果。一个HTTP请求包含多个套接字操作(比如DNS请求或其他可能被HTTP客户端隐藏的操作)。因此,整个操作的超时时间就变得不可预测了。