使用requests模块下载RAR文件出现文件头损坏问题求助
问题分析与解决
你的代码存在致命问题:每次循环都以wb模式打开文件,这会覆盖之前写入的内容,最终文件只保留了最后一个chunk的数据,自然会导致RAR头损坏。
修正后的代码
import requests KALI = "URL CENSORED" file_path = "your_target_path.rar" # 正确写法:在循环外打开文件,持续写入 with open(file_path, "wb") as f: kali_res = requests.get(KALI, stream=True) # 可选:确保请求成功,避免下载错误响应的内容 kali_res.raise_for_status() # 增大chunk_size提升下载效率,1MB是合理的取值 for chunk in kali_res.iter_content(chunk_size=1024*1024): f.write(chunk)
额外验证建议
- 下载完成后,对比本地文件与服务器文件的MD5/SHA哈希值,确认文件完整性。
- 检查响应头的
Content-Length,对比本地文件大小是否一致(需服务器正确返回该字段):import os server_file_size = int(kali_res.headers.get("Content-Length", 0)) local_file_size = os.path.getsize(file_path) if server_file_size != local_file_size: print("文件下载不完整,大小不匹配")
内容的提问来源于stack exchange,提问作者xavvvv
相关产品推荐
相关产品推荐

