91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

python curl命令如何進行斷點續傳

小樊
81
2024-11-28 22:33:24
欄目: 編程語言

在Python中,要實現類似于curl命令的斷點續傳功能,可以使用requests庫結合requests_toolbelt中的Retry模塊。以下是一個示例代碼:

import requests
from requests_toolbelt.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

url = "https://example.com/largefile.zip"
local_filename = "largefile.zip"
chunk_size = 1024 * 1024  # 1MB

# 設置重試策略
retry_strategy = Retry(
    total=3,  # 總共重試的次數
    status_forcelist=[429, 500, 502, 503, 504],  # 針對這些狀態碼進行重試
    allowed_methods=["HEAD", "GET"],  # 只允許HEAD和GET請求
    backoff_factor=1  # 重試間隔的因子
)

# 創建一個HTTP適配器并應用重試策略
adapter = HTTPAdapter(max_retries=retry_strategy)

# 使用Session對象來發送帶有重試策略的請求
with requests.Session() as session:
    session.mount("https://", adapter)
    session.mount("http://", adapter)

    # 打開本地文件并設置寫入模式
    with open(local_filename, "ab") as file:
        # 發送HEAD請求以獲取文件大小
        response = session.head(url)
        file_size = int(response.headers["Content-Length"])

        # 初始化文件指針位置
        file.seek(0, os.SEEK_END)

        # 發送GET請求以分塊下載文件
        for start in range(0, file_size, chunk_size):
            end = min(start + chunk_size - 1, file_size - 1)
            headers = {"Range": f"bytes={start}-{end}"}
            response = session.get(url, headers=headers, stream=True)

            # 檢查響應狀態碼是否為206(Partial Content)
            if response.status_code == 206:
                # 將數據寫入本地文件
                for chunk in response.iter_content(chunk_size=chunk_size):
                    if chunk:
                        file.write(chunk)
            else:
                print(f"Download failed with status code {response.status_code}")
                break

在這個示例中,我們首先使用HEAD請求獲取文件的大小,然后使用GET請求分塊下載文件。通過設置Range頭,我們可以請求文件的特定部分,從而實現斷點續傳。我們還設置了重試策略,以便在網絡不穩定時自動重試下載。

0
子洲县| 敦煌市| 玛纳斯县| 额敏县| 内黄县| 左权县| 鹰潭市| 临猗县| 故城县| 久治县| 从化市| 济源市| 怀来县| 松滋市| 瓦房店市| 香港| 商河县| 克拉玛依市| 平湖市| 伊宁市| 顺昌县| 湟中县| 新疆| 革吉县| 奈曼旗| 济宁市| 安西县| 鄂尔多斯市| 乐至县| 尼玛县| 长宁县| 永寿县| 秦安县| 富平县| 平安县| 鹿邑县| 大田县| 家居| 大厂| 蓝山县| 西乡县|