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

Python requests.get请求在服务器超4分钟响应时冻结问题求助

问题解决思路与方案

核心原因

Windows 11云PC环境的默认TCP连接空闲超时阈值(4分钟)比Windows 10更严格,当服务器长时间处理请求未返回数据时,本地系统会判定连接无活动并主动关闭;而Windows 10的默认设置允许更长的空闲连接时长,因此不会触发该问题。

可行解决方案

1. 启用TCP Keep-Alive维持连接

通过给requests配置自定义适配器,开启TCP保活机制,定期发送心跳包避免系统判定连接空闲。示例代码:

import requests
from requests.adapters import HTTPAdapter
from urllib3.poolmanager import PoolManager
import socket

class KeepAliveAdapter(HTTPAdapter):
    def init_poolmanager(self, *args, **kwargs):
        kwargs['socket_options'] = socket.SO_KEEPALIVE
        # 设置心跳参数:每120秒触发一次保活,间隔60秒重试,最多重试5次
        if hasattr(socket, 'TCP_KEEPIDLE'):
            kwargs['socket_options'] += (socket.TCP_KEEPIDLE, 120)
        if hasattr(socket, 'TCP_KEEPINTVL'):
            kwargs['socket_options'] += (socket.TCP_KEEPINTVL, 60)
        if hasattr(socket, 'TCP_KEEPCNT'):
            kwargs['socket_options'] += (socket.TCP_KEEPCNT, 5)
        return super().init_poolmanager(*args, **kwargs)

session = requests.Session()
session.mount('https://', KeepAliveAdapter())
# 设置总超时为7分钟(覆盖服务器最长6分钟处理时间)
response = session.get('https://www.yyy.com/zzz/aaa/', auth=HTTPBasicAuth('dddd', ''), timeout=420)

2. 调整Windows系统TCP超时设置

若代码方案无效,可修改Windows 11云PC的注册表延长空闲超时:

  • 打开注册表编辑器(运行regedit)
  • 定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  • 添加/修改以下DWORD值(单位:毫秒):
    • TCPKeepAliveTime:设为360000(6分钟,替代默认的240000)
    • TCPKeepAliveInterval:设为10000(10秒)
    • TCPMaxDataRetransmissions:设为5
  • 修改后重启系统生效

3. 排查云PC网络策略限制

Microsoft 365云PC可能存在租户级别的网络超时策略,可联系IT管理员确认是否有此类限制,并申请调整允许更长的HTTP请求超时时长。

内容的提问来源于stack exchange,提问作者Karthik Kumar Premkumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 02:17:00