urlib.url检索和urlib2损坏文件

2024-05-18 19:23:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个令人沮丧的绊脚石与一个XBMC扩展我正在工作。在

总之,如果我使用Firefox、IE等下载一个文件,那么该文件是有效的,并且可以正常工作,但是如果我在python中使用urlib或urlib2,则该文件已损坏。在

有问题的文件是:http://re.zoink.it/00b007c479(007960DAD4832AC714C465E207055F2BE18CAFF6.torrent)

以下是校验和:

PY: 2d1528151c62526742ce470a01362ab8ea71e0a7
IE: 60a93c309cae84a984bc42820e6741e4f702dc21

校验和不匹配(Python DL已损坏,IE/FF DL未损坏)

这是我为完成这个任务而编写的函数

^{pr2}$

我做错什么了?如果我用python下载,有些源代码下载正确,而另一些源代码总是导致文件损坏。他们似乎都能正确下载,因为我用的是网络浏览器

提前谢谢。。。在


Tags: 文件rehttp源代码itfirefoxtorrent校验
1条回答
网友
1楼 · 发布于 2024-05-18 19:23:21

响应是Gzip编码的:

>>> import urllib2
>>> remotefile = urllib2.urlopen('http://re.zoink.it/00b007c479')
>>> remotefile.info()['content-encoding']
'gzip'

您的浏览器会为您解码,但urllib2不会。你需要先自己动手:

^{pr2}$

解压后,数据完全符合SHA1签名:

>>> import zlib
>>> import hashlib
>>> data = remotefile.read()
>>> hashlib.sha1(data).hexdigest()
'2d1528151c62526742ce470a01362ab8ea71e0a7'
>>> hashlib.sha1(zlib.decompress(data, zlib.MAX_WBITS + 16)).hexdigest()
'60a93c309cae84a984bc42820e6741e4f702dc21'

您可能想切换到使用^{} module,它透明地处理内容编码:

>>> import requests
>>> response = requests.get('http://re.zoink.it/00b007c479')
>>> hashlib.sha1(response.content).hexdigest()
'60a93c309cae84a984bc42820e6741e4f702dc21'

相关问题 更多 >

    热门问题