python requests 检查文件是否正确下载

1 投票
1 回答
3073 浏览
提问于 2025-04-18 06:51

我正在使用 requests 库从一个网站下载一些图片。
我的代码会在下载后检查文件的大小。
下面是一个示例代码:

def download(url, store_dir):
    r = requests.get(url, headers=headers, proxies=proxies)

    filename = r.headers.get('content-disposition').split('=')[1]

    real_length = int(r.headers.get('content-length'))

    wholepath = os.path.join(store_dir, filename)

    with open(wholepath, 'wb') as f:
        f.write(r.content)
        f.close()

    if os.path.getsize(wholepath) != real_length:
        print('size error')
        print('status_code: %s' %r.status_code)
        print('headers: %s' %r.headers)
        print('url"%s' % url)
        print('orgin:', r.headers['content-length'], 'now',os.path.getsize(wholepath))
        self.download(url, store_dir)

但是我发现,即使 os.path.getsize(wholepath) == real_length,有时候下载的图片文件还是会损坏。
我该怎么解决这个问题呢?

1 个回答

5

快四年了。我差点忘了这个问题,直到今天收到一个踩赞。

让我来结束这个问题:

没有完美的方法可以在没有文件哈希字符串的情况下验证文件。

不过,如果你是从网站上抓取文件,可以试着看看页面或网址上有没有看起来像md5或sha1的字符串,然后试试看。如果运气好,那就是文件的哈希值,你就可以用它来验证文件。如果运气不好,那就没办法了。

撰写回答