为什么在使用requests
和urlopen(url).info()
>>> url = 'http://pymotw.com/2/urllib/index.html'
>>> requests.head(url).headers.get('content-length', None)
'8176'
>>> urllib.urlopen(url).info()['content-length']
'38227'
>>> len(requests.get(url).content)
38274
我打算检查文件大小(以字节为单位),根据Range
中的urllib2
将缓冲区拆分为多个线程但如果我没有文件的实际大小,则以字节为单位不会工作..
只有len(requests.get(url).content)
提供最接近但仍然不正确的38274
,而且它正在下载我不想要的内容。
答案 0 :(得分:8)
默认情况下,请求会将'Accept-Encoding': 'gzip'
作为请求标头的一部分发送,服务器将使用压缩内容进行响应:
>>> r = requests.head('http://pymotw.com/2/urllib/index.html')
r>>> r.headers['content-encoding'], r.headers['content-length']
('gzip', '8201')
但是,如果您手动设置请求标头,那么您将获得未压缩的内容:
>>> r = requests.head('http://pymotw.com/2/urllib/index.html',headers={'Accept-Encoding': 'identity'})
>>> r.headers['content-length']
'38227'