由于触发了自定义规则,导致返回content-length大于实际页面内容,报IncompleteRead异常。 解决方法如下: 1.修改_safe_read方法,将抛出异常换为返回数据 s = [] while amt > 0: chunk = self.fp.read(min(amt, MAXAMOUNT)) if not chunk: #raise IncompleteRead(s) return ''.join(s) s.append(chunk) amt -= len(chunk) return ''.join(s) 2.使用装饰器打patch def patch_http_response_read(func): def inner(*args): try: return func(*args) except IncompleteRead, e: return ''.join(e.partial) return inner HTTPResponse.read = patch_http_response_read(HTTPResponse.read) 将上面代码放到httplib的最后就可以了,注意IncompletedRead的partial参数是list变量,因为_safe_read中的s是[]。 个人推荐第二种方法。 赞微海报分享
近期评论