python urlopen 超时_python 2.6之前版本中的urllib2.urlopen()超时

有了很大的刺激,您可以重写urlib2.httphandler使用的httplib.httpConnection类。

def urlopen_with_timeout(url, data=None, timeout=None):

# Create these two helper classes fresh each time, since

# timeout needs to be in the closure.

class TimeoutHTTPConnection(httplib.HTTPConnection):

def connect(self):

"""Connect to the host and port specified in __init__."""

msg = "getaddrinfo returns an empty list"

for res in socket.getaddrinfo(self.host, self.port, 0,

socket.SOCK_STREAM):

af, socktype, proto, canonname, sa = res

try:

self.sock = socket.socket(af, socktype, proto)

if timeout is not None:

self.sock.settimeout(timeout)

if self.debuglevel > 0:

print "connect: (%s, %s)" % (self.host, self.port)

self.sock.connect(sa)

except socket.error, msg:

if self.debuglevel > 0:

print 'connect fail:', (self.host, self.port)

if self.sock:

self.sock.close()

self.sock = None

continue

break

if not self.sock:

raise socket.error, msg

class TimeoutHTTPHandler(urllib2.HTTPHandler):

http_request = urllib2.AbstractHTTPHandler.do_request_

def http_open(self, req):

return self.do_open(TimeoutHTTPConnection, req)

opener = urllib2.build_opener(TimeoutHTTPHandler)

opener.open(url, data)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值