最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 文件下載之?dāng)帱c(diǎn)續(xù)傳的實(shí)現(xiàn)

 更新時間:2021年11月08日 15:06:04   作者:不俠居  
用python進(jìn)行文件下載的時候,一旦出現(xiàn)網(wǎng)絡(luò)波動問題,導(dǎo)致文件下載到一半。如果將下載不完全的文件刪掉,那么又需要從頭開始,如果連續(xù)網(wǎng)絡(luò)波動,是不是要頭禿了。本文提供斷點(diǎn)續(xù)傳下載工具方法,希望可以幫助到你

1.前序

當(dāng)下載突然斷開后,斷點(diǎn)續(xù)傳就需要了,繼續(xù)前面下載的內(nèi)容下載。解決了不需要重復(fù)下載

2.技術(shù)原理

HTTP/1.1 開始支持?jǐn)帱c(diǎn)續(xù)傳,一般斷點(diǎn)下載會用到 Range 和 Content-Range 實(shí)體頭
Range是請求頭,Content-Range是響應(yīng)頭

2.1 Content-Range

用于響應(yīng)頭中

語法:

Content-Length: <length>

2.2 Range

RangeHTTP 請求頭表示服務(wù)器應(yīng)返回的文檔部分。可以同時用一個頭請求多個部件,服務(wù)器可以在多部分文檔中發(fā)回這些范圍。如果服務(wù)器發(fā)回范圍,則使用 206 部分內(nèi)容進(jìn)行響應(yīng)。如果范圍無效,服務(wù)器會返回 416 范圍不可滿足的錯誤。服務(wù)器還可以忽略標(biāo)題,然后返回整個文檔,并返回 200 狀態(tài)代碼。

語法:

Range: <unit>=<range-start>-
Range: <unit>=<range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>, <range-start>-<range-end>
Range: <unit>=-<suffix-length>

unit:指定范圍的單位,通常是bytes。
range-start:指示請求范圍開始的給定單元中的整數(shù)。
range-end:給定單元中的整數(shù),指示所請求范圍的末尾。此值是可選的,如果省略,文檔的末尾將被視為范圍的末尾。
suffix-length:給定單位中的整數(shù),指示要返回的文件末尾的單位數(shù)。

例子:
(1)從文件中請求三個范圍。第一個范圍為第200字節(jié)到第1000個字節(jié)的位置;第二個范圍為第2000個字節(jié)位置到第6576個字節(jié)的位置;第三個范圍為第19000字節(jié)位置之后的全部

Range: bytes=200-1000, 2000-6576, 19000-

(2)請求文件的前 500 和最后 500 字節(jié)。如果范圍重疊,服務(wù)器可能會拒絕該請求。

Range: bytes=0-499, -500

3. 代碼實(shí)現(xiàn)

import requests
import os
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36'
}
file_path = './video/1.mp4' # 存儲地址
url = 'https://v3-dy-o.zjcdn.com/410b9087e76fe2360e320463f8586ed8/6185ea7a/video/tos/cn/tos-cn-ve-15-alinc2/62427caf076b4d7d9dbbdbea98f97c9f/?a=6383&br=2690&bt=2690&cd=0%7C0%7C0&ch=26&cr=0&cs=0&cv=1&dr=0&ds=3&er=&ft=jal9w1-eTz7ThWR7Wlct&l=021636162458101fdbd400a040000000a70125e00000141b4be97&lr=all&mime_type=video_mp4&net=0&pl=0&qs=0&rc=M3U8bDw6ZmZsODMzNGkzM0ApPDY3Ozs7Mzw7NzY6N2g0aWdqNGVfcjRnZG5gLS1kLTBzczU2MV40Ly40NmAtLV8xLWI6Yw%3D%3D&vl=&vr='
r = requests.get(url,headers=header)
total_size = int(r.headers['Content-Length']) # 查看文件大小,并轉(zhuǎn)換為整數(shù)類型
print(r.headers)
# 查看本地下載了多少
if os.path.exists(file_path):
    temp_size = os.path.getsize(file_path)  # 本地已經(jīng)下載的文件大小
else:
    temp_size = 0

print('已下載:' + temp_size) 
print('總共需要下載:' + total_size)
header['Range'] = 'bytes={}-'.format(temp_size) # 向頭加入Range信息
print(header) # 打印頭信息
r = requests.get(url, headers=header, stream=True)
with open(file_path, "ab") as f:
        for chunk in r.iter_content(chunk_size=1024):
            if chunk:
                temp_size += len(chunk)
                f.write(chunk)
                

現(xiàn)在不知到怎么做突然下載被停止后,數(shù)據(jù)能寫入文件了,所以現(xiàn)在是手動模擬下載斷開。

在寫入文件中加入了一個判斷,當(dāng)文件下載了5M時停止下載,之后再刪掉這段代碼,在重新下載。

with open(file_path, "ab") as f:
        for chunk in r.iter_content(chunk_size=1024):
            if chunk:
                temp_size += len(chunk)
                f.write(chunk)
                if temp_size > 1024 *1024 * 5:
                    break

第一次下載

在這里插入圖片描述


第二次下載

在這里插入圖片描述

到此這篇關(guān)于python 文件下載之?dāng)帱c(diǎn)續(xù)傳的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python 斷點(diǎn)續(xù)傳內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pyMySQL SQL語句傳參問題,單個參數(shù)或多個參數(shù)說明

    pyMySQL SQL語句傳參問題,單個參數(shù)或多個參數(shù)說明

    這篇文章主要介紹了pyMySQL SQL語句傳參問題,單個參數(shù)或多個參數(shù)說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 在Python的Django框架中實(shí)現(xiàn)Hacker News的一些功能

    在Python的Django框架中實(shí)現(xiàn)Hacker News的一些功能

    這篇文章主要介紹了在Python的Django框架中實(shí)現(xiàn)Hacker News的一些功能,包括投票“頂”評論等功能,需要的朋友可以參考下
    2015-04-04
  • 使用Python webdriver圖書館搶座自動預(yù)約的正確方法

    使用Python webdriver圖書館搶座自動預(yù)約的正確方法

    這篇文章主要介紹了使用Python webdriver圖書館搶座自動預(yù)約的正確方法,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 詳解python實(shí)現(xiàn)識別手寫MNIST數(shù)字集的程序

    詳解python實(shí)現(xiàn)識別手寫MNIST數(shù)字集的程序

    這篇文章主要介紹了詳解python實(shí)現(xiàn)識別手寫MNIST數(shù)字集的程序,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • pytorch中Schedule與warmup_steps的用法說明

    pytorch中Schedule與warmup_steps的用法說明

    這篇文章主要介紹了pytorch中Schedule與warmup_steps的用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python練習(xí)之ORM框架

    Python練習(xí)之ORM框架

    這篇文章主要介紹了Python練習(xí)之ORM框架,通過使用SQLObject框架操作MySQL數(shù)據(jù)庫展開文章主題詳細(xì)內(nèi)容,具有一定的參考價值,需要的朋友可以參考一下
    2022-06-06
  • Python實(shí)現(xiàn)人臉識別

    Python實(shí)現(xiàn)人臉識別

    這篇文章主要介紹了Python實(shí)現(xiàn)人臉識別,首選抓取多張圖片,從中獲取特征數(shù)據(jù)集和平均特征值然后寫入?csv?文件?-?計算特征數(shù)據(jù)集的歐式距離作對比,下面一起來看具體得實(shí)現(xiàn)過程吧
    2022-01-01
  • Pytorch 實(shí)現(xiàn)變量類型轉(zhuǎn)換

    Pytorch 實(shí)現(xiàn)變量類型轉(zhuǎn)換

    這篇文章主要介紹了Pytorch 實(shí)現(xiàn)變量類型轉(zhuǎn)換操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python操作sqlite3快速、安全插入數(shù)據(jù)(防注入)的實(shí)例

    Python操作sqlite3快速、安全插入數(shù)據(jù)(防注入)的實(shí)例

    這篇文章主要介紹了Python操作sqlite3快速、安全插入數(shù)據(jù)(防注入)的實(shí)例,通過在一個表格中進(jìn)行操作來論述如何使用Python快速安全地操作sqlite3,需要的朋友可以參考下
    2014-04-04
  • 學(xué)會這個炫酷圖表利器pyecharts,還怕不被公司重用?

    學(xué)會這個炫酷圖表利器pyecharts,還怕不被公司重用?

    前段時間,公司高層要看上半年度項(xiàng)目組業(yè)績數(shù)據(jù)分析,沒辦法,硬著頭皮也要上!說到數(shù)據(jù)分析,肯定離不開數(shù)據(jù)的可視化,畢竟圖表比冷冰冰的數(shù)字更加直觀,Boss只想一眼就能看出趨勢和結(jié)論.今天我們就聊一聊 pyecharts 中幾種常用的圖表, ,需要的朋友可以參考下
    2021-06-06

最新評論

无锡市| 隆德县| 浙江省| 贵定县| 那坡县| 绥宁县| 邢台市| 赞皇县| 崇左市| 勃利县| 九寨沟县| 石嘴山市| 裕民县| 丰城市| 三江| 冀州市| 苍梧县| 泰来县| 鹤壁市| 陵川县| 松阳县| 北票市| 林口县| 神池县| 新乡县| 左权县| 疏附县| 龙川县| 蓬莱市| 新竹县| 色达县| 左贡县| 庆城县| 鸡西市| 旺苍县| 西藏| 吉水县| 河津市| 肥城市| 新建县| 双江|