激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python 文件下載之斷點續傳的實現

python 文件下載之斷點續傳的實現

2022-02-25 13:23不俠居 Python

用python進行文件下載的時候,一旦出現網絡波動問題,導致文件下載到一半。如果將下載不完全的文件刪掉,那么又需要從頭開始,如果連續網絡波動,是不是要頭禿了。本文提供斷點續傳下載工具方法,希望可以幫助到你

1.前序

當下載突然斷開后,斷點續傳就需要了,繼續前面下載的內容下載。解決了不需要重復下載

 

2.技術原理

HTTP/1.1 開始支持斷點續傳,一般斷點下載會用到 Range 和 Content-Range 實體頭
Range是請求頭,Content-Range是響應頭

2.1 Content-Range

用于響應頭中

語法:

Content-Length: <length>

2.2 Range

RangeHTTP 請求頭表示服務器應返回的文檔部分。可以同時用一個頭請求多個部件,服務器可以在多部分文檔中發回這些范圍。如果服務器發回范圍,則使用 206 部分內容進行響應。如果范圍無效,服務器會返回 416 范圍不可滿足的錯誤。服務器還可以忽略標題,然后返回整個文檔,并返回 200 狀態代碼。

語法:

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:指示請求范圍開始的給定單元中的整數。
range-end:給定單元中的整數,指示所請求范圍的末尾。此值是可選的,如果省略,文檔的末尾將被視為范圍的末尾。
suffix-length:給定單位中的整數,指示要返回的文件末尾的單位數。

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

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

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

Range: bytes=0-499, -500

 

3. 代碼實現

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']) # 查看文件大小,并轉換為整數類型
print(r.headers)
# 查看本地下載了多少
if os.path.exists(file_path):
  temp_size = os.path.getsize(file_path)  # 本地已經下載的文件大小
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)
              

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

在寫入文件中加入了一個判斷,當文件下載了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

第一次下載

python 文件下載之斷點續傳的實現


第二次下載

python 文件下載之斷點續傳的實現

到此這篇關于python 文件下載之斷點續傳的實現的文章就介紹到這了,更多相關python 斷點續傳內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/m0_46778548/article/details/121174049

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久成人黄色 | 天天干天天碰 | 久久99精品久久 | 亚洲精品tv久久久久久久久久 | 午夜影视一区二区 | 午夜色视频在线观看 | www视频免费在线观看 | 亚洲五码在线观看视频 | 亚洲小视频在线 | 久久精品色| 精品国产专区 | 久久久亚洲欧美综合 | 污片在线观看视频 | 久久久久久久久久综合 | 午夜视频导航 | 亚洲视频综合网 | 国产日韩久久久久69影院 | 免费观看高清视频网站 | 夜添久久精品亚洲国产精品 | 欧美一级视频网站 | 欧美爱爱视频网站 | 国内精品久久久久久影视8 国产一区二区成人在线 | 欧美一区二区三区免费观看 | 日本一级黄色大片 | 中文字幕综合 | 欧美激情性色生活片在线观看 | 性欧美一区二区 | 国产91片 | 制服下着マ○コ航空5 | 一边吃奶一边摸下娇喘 | 成人444kkkk在线观看 | 欧美精品一级 | 特级黄毛片 | 可以免费看的av | 性欧美性欧美 | 国产午夜小视频 | 日韩欧美视频一区二区三区 | 一级做a爱视频 | www.17c亚洲蜜桃 | 香蕉视频99| 最近免费观看高清韩国日本大全 |