簡體   English   中英

Python http 下載使用 requests.get 總是缺少一個塊

[英]Python http download using requests.get always missing a chunk

我正在嘗試定義一個 function ,如果連接斷開,它將恢復下載。 但是,以下內容無法按預期工作。 在第 8 行中,我必須手動推導出一個塊大小才能使其工作,否則,每次我恢復最終文件時,最終文件都會丟失一個塊大小。

if os.path.exists(fileName):
    header = requests.head(url)
    fileLength = int(header.headers['Content-Length'])
    if fileLength == os.path.getsize(fileName):
        return True
    else:
        with open(fileName, 'ab') as f:
            position = f.tell()-1024
            pos_header = {}
            print(position)
            pos_header['Range'] = f'bytes={position}-'

        with requests.get(url, headers = pos_header, stream = True) as r:
            with open(fileName, 'ab') as f:
                    #some validation should be here

                for chunk in r.iter_content(chunk_size=1024):
                    if chunk:
                        f.write(r.content)
                        f.flush()
                        print(os.path.getsize(fileName))

else:
    with requests.get(url, allow_redirects=True, stream = True) as r:
        with open(fileName, 'wb') as f:
            iter = 0
            for chunk in r.iter_content(chunk_size = 1024):
                if chunk:
                    f.write(chunk)
                    f.flush()
                    iter += 1
                if iter > 2000:
                    break

有趣的是,缺少的部分是下載的兩個部分之間。 有沒有比我做的更優雅的方法來解決這個問題?

如果這是第二次嘗試,您的代碼中有一個錯誤,它會下載文件的“其余部分”。 該錯誤位於以下行中:

f.write(r.content)

它應該是

f.write(chunk)

基本上,您正在迭代塊,但要編寫整個內容,這會使事情變得混亂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM