在下载之前使用 HTTP 标头获取文件大小,该标头与从 urlopen 检索到的标头不匹配

2024-04-02

为什么使用时内容长度不同requests and 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 in urllib2但如果我没有文件的实际大小(以字节为单位),它将无法工作。

only len(requests.get(url).content) gives 38274这是最接近的,但仍然不正确,而且它正在下载我不想要的内容。


默认情况下,请求将发送'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'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在下载之前使用 HTTP 标头获取文件大小,该标头与从 urlopen 检索到的标头不匹配 的相关文章

随机推荐