You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python requests库下载Word文档时遇ChunkedEncodingError求助

解决requests下载Word文档时的ChunkedEncodingError问题

核心原因

服务器会校验请求的身份标识(如User-Agent),requests默认请求头与浏览器差异较大,导致服务器中断分块传输;或一次性加载全部内容时,连接不稳定引发中断。

解决方案

1. 模拟浏览器请求头

复制浏览器的请求头(重点是User-Agent)添加到请求中,让服务器识别为浏览器发起的请求:

import requests

url = 'https://legalref.judiciary.hk/doc/judg/word/vetted/other/ch/2008/CACC000213A_2008.doc'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}
res = requests.get(url, headers=headers)
res.raise_for_status()  # 校验请求是否成功
with open('document.doc', 'wb') as f:
    f.write(res.content)

2. 流模式分块下载

针对大文件,用stream=True分块读取,避免一次性加载导致连接中断:

import requests

url = 'https://legalref.judiciary.hk/doc/judg/word/vetted/other/ch/2008/CACC000213A_2008.doc'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

with requests.get(url, headers=headers, stream=True) as res:
    res.raise_for_status()
    with open('document.doc', 'wb') as f:
        for chunk in res.iter_content(chunk_size=8192):  # 每次读取8KB
            f.write(chunk)

3. 配置重试机制

针对连接不稳定场景,设置HTTP适配器增加重试次数:

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

url = 'https://legalref.judiciary.hk/doc/judg/word/vetted/other/ch/2008/CACC000213A_2008.doc'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

# 配置重试策略
session = requests.Session()
retry = Retry(
    total=3,  # 总重试次数
    backoff_factor=1,  # 重试间隔按1、2、4秒递增
    status_forcelist=[429, 500, 502, 503, 504]  # 需要触发重试的状态码
)
adapter = HTTPAdapter(max_retries=retry)
session.mount('https://', adapter)
session.mount('http://', adapter)

with session.get(url, headers=headers, stream=True) as res:
    res.raise_for_status()
    with open('document.doc', 'wb') as f:
        for chunk in res.iter_content(chunk_size=8192):
            f.write(chunk)

补充说明

浏览器能正常下载,是因为它自动携带了符合服务器要求的请求头,且连接中断时会自动重试。以上方法通过模拟浏览器请求行为、分块传输、重试机制,解决服务器中断连接的问题。

内容的提问来源于stack exchange,提问作者lilming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 14:37:36