如果下载的数据是gzip编码的,那么将它们加入for data in response.iter_content():后的内容长度和数据的总长度是不同的,因为它会自动解压缩gzip编码的响应
因此,酒吧变得越来越长,一旦它成为一个单一的线路,它开始淹没终端
这个问题的一个可行的例子(该网站是我在谷歌上找到的第一个同时获得内容长度和gzip编码的网站):import requests,sys
def test(link):
print("starting")
response = requests.get(link, stream=True)
total_length = response.headers.get('content-length')
if total_length is None: # no content length header
data = response.content
else:
dl = 0
data = b""
total_length = int(total_length)
for byte in response.iter_content():
dl += len(byte)
data += (byte)
done = int(50 * dl / total_length)
sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)))
sys.stdout.flush()
print("total data size: %s, content length: %s" % (len(data),total_length))
test("http://www.pontikis.net/")
ps,我在linux上,但它也会影响到其他操作系统(除了windows,因为它不能在iirc上工作)
我正在使用请求。会话对于cookies(和gzip)处理,所以使用urllib和其他模块的解决方案不是我想要的