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

使用Python requests.post上传大文件时连接中断错误的解决方法

解决requests上传大文件时的RemoteDisconnected错误

上传大文件时出现RemoteDisconnected错误,通常是请求超时、内存占用过高或服务器端限制导致的,可通过以下几种方式调整requests设置解决:

1. 延长请求超时时间

requests默认超时时间较短,大文件传输需要更长时间。通过timeout参数分别设置连接超时和读取超时(单位:秒),避免因传输未完成被服务器中断连接:

files ={'compressed_file':open(compressed_file_path,'rb')}    
values={'Name_Column':column_name}
# 连接超时30秒,读取超时300秒(可根据文件大小调整)
r = requests.post(url, files=files, data=values, timeout=(30, 300))

2. 使用分块上传(流式传输)

默认情况下requests会将整个文件加载到内存中,大文件会占用大量内存且易引发连接问题。借助requests-toolbelt的MultipartEncoder实现分块上传,避免一次性加载文件:
先安装依赖:

pip install requests-toolbelt

再修改代码:

from requests_toolbelt.multipart.encoder import MultipartEncoder

encoder = MultipartEncoder(
    fields={
        'Name_Column': column_name,
        'compressed_file': ('your_file.zip', open(compressed_file_path, 'rb'), 'application/zip')
    }
)

# 带上正确的Content-Type头,同时设置超时
r = requests.post(url, data=encoder, headers={'Content-Type': encoder.content_type}, timeout=(30, 300))

3. 添加重试机制

网络波动可能导致连接中断,通过会话对象配置重试策略,在遇到特定错误时自动重试:

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

# 创建会话并配置重试规则
session = requests.Session()
retry_strategy = Retry(
    total=3,  # 总重试次数
    backoff_factor=1,  # 重试间隔指数递增
    status_forcelist=[429, 500, 502, 503, 504]  # 需要触发重试的状态码
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount('http://', adapter)
session.mount('https://', adapter)

# 使用会话发送请求
files ={'compressed_file':open(compressed_file_path,'rb')}    
values={'Name_Column':column_name}
r = session.post(url, files=files, data=values, timeout=(30, 300))

4. 确认服务器端限制

若以上设置无效,需检查服务器端配置:

  • 确认服务器允许的最大上传文件大小(如Nginx的client_max_body_size参数)
  • 检查服务器的请求超时时间,确保其大于文件传输所需时长

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:55:31