Kar*_*Kar 3 python httplib httpconnection
我正在尝试使用HTTPConnection(2.7.8)发出请求,我已将超时设置为10 HTTPConnection(host, timeout=10).但是,HTTPConnection.request()10秒后似乎没有超时.事实上,HTTPConnection.timeout似乎甚至没有被阅读HTTPConnection.request()(它只是通过阅读HTTPConnection.connect().我的理解是正确的吗?timeout只适用于connect()而不是request()吗?有没有办法超时request()?
更新:
我想我已经进一步缩小了这个问题:如果我不提供该方案,它将不会尊重套接字超时.如果提供了该方案,即完整的URL http://google.com:22222,则它会相应地超时.我想知道为什么该计划的存在应该有所作为.也就是说,以下不尊重超时
socket.setdefaulttimeout(3)
conn = HTTPConnection('google.com:22222')
conn.timeout = 3
conn.request('GET', '')
Run Code Online (Sandbox Code Playgroud)
然而,这样做:
socket.setdefaulttimeout(3)
conn = HTTPConnection('http://google.com:22222')
conn.timeout = 3
conn.request('GET', '')
Run Code Online (Sandbox Code Playgroud)
但是,它不会发生在所有域中.
谢谢
以下代码失败大约需要30秒:
#!/usr/bin/env python2
from httplib import HTTPConnection
conn = HTTPConnection('google.com', 22222, timeout=2)
conn.request('GET', '')
Run Code Online (Sandbox Code Playgroud)
如果传递ip HTTPConnection而不是主机名,则会按预期在2秒内引发超时错误:
#!/usr/bin/env python2
import socket
from httplib import HTTPConnection
host, port = 'google.com', 22222
ip, port = socket.getaddrinfo(host, port)[0][-1]
conn = HTTPConnection(ip, port, timeout=2)
conn.request('GET', '')
Run Code Online (Sandbox Code Playgroud)
解释与ftplib相同.FTP超时具有不一致的行为:超时可能限制单个套接字操作,但它没有说明HTTPConnection()调用本身的持续时间,可能会尝试返回的几个IP地址getaddrinfo()和超时限制仅单个套接字操作.多项操作合并可能需要更长时间
你的HTTPConnection('http://google.com:22222')失败很快,因为url是一个不正确的参数:它应该是host或者host:port.绝对url是被request()方法接受的- 尽管它有特殊含义 - 通常,你只需要提供路径'/'.