download - python requests 下载大文件不完整
阿神
阿神 2017-04-17 17:08:56
0
3
950

目前我有一个脚本, 从帝联的 CDN 外链获取一下文件作为备份.
使用的是

Python 2.7.10
requests 2.8.1 

目前碰到一个情况, 使用 requests 下载大文件的时候会出现下载文件不完整的情况, 出现的概率非常大, 应该不会是网络原因导致的. 相关代码概括如下:

requests.adapters.DEFAULT_RETRIES = 5
response = requests.get(url, stream=True)
status = response.status_code
if status == 200:
    total_size = int(response.headers['Content-Length'])
    with open('xxx', 'wb') as of:
        for chunk in response.iter_content(chunk_size=102400):
            if chunk:
                of.write(chunk)
    

下载完毕后我会使用如下方式和上面的 total_size 进行对比

with open('xxx', 'r') as f:
    if isinstance(f, file):
        length = os.fstat(f.fileno()).st_size
        
if total_size == length:
    True
else:
    False
    

代码逻辑如上. 但是对于 100M 以上的文件, 几乎都是保存在本地的文件和获取的响应头里面的 content-length 不一致.
是我 requests 的用法不对吗? 还是有其他更好的办法可以保证文件能完整的下载呢?

阿神
阿神

闭关修行中......

모든 응답(3)
P粉451270645

요청의 불완전한 다운로드 문제를 해결할 수 있는 기사를 찾았습니다: https://www.jianshu.com/p/f92704c42b49

주로 response.raw.tell() 및 response.headers.get(' Content-를 사용합니다. 길이')

黄舟

네트워크는 본질적으로 불안정합니다. 대용량 파일을 다운로드할 때 특정 성공 확률이 있는 한 네트워크 문제일 수 있습니다.

해결 방법은 다운로드 후 크기를 비교하여 다운로드가 완료되지 않은 경우 다운로드를 재개하는 것입니다. 참고: Python으로 중단점 이력서 다운로드 소프트웨어 작성

또 다른 방법은 다운로드 재개를 지원하는 컬과 같은 다운로드 도구를 호출하는 것입니다.

黄舟

포스터로 이 문제가 해결되었나요? 저도 같은 문제가 발생했는데 오류가 보고되지 않았으며 여러 M 파일이 완전히 다운로드되지 않았습니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿