【发布时间】:2014-08-26 10:08:03
【问题描述】:
为什么在使用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
我打算检查文件大小(以字节为单位),以根据urllib2 中的Range 将缓冲区拆分为多个线程,但如果我没有以字节为单位的文件实际大小,它将无法工作..
只有len(requests.get(url).content) 给出最接近但仍然不正确的38274,而且它正在下载我不想要的内容。
【问题讨论】:
-
可能是服务器没有正确支持
HEAD。或者,服务器可能会根据相应方法(用户代理、cookie ......)发送(或不发送)的其他标头返回不同的内容。尝试使用curl -v url和curl -I,或任何其他发送完全相同请求的方法,除了HEAD,而不是post,并检查结果。 -
也许第一个尺寸是压缩后的尺寸?
-
@BlackBear :那么如何获得未压缩的大小?
-
您可以通过查看压缩方法进行(非常粗略的)估计。例如,gzip 的压缩比为 3:1 - 5:1(来源:superuser.com/questions/139253/…)
标签: python python-requests urllib