[Errno 104] Connection reset by peer During handling of the above exception, ano...

2025年11月03日 17:35 响应: 20.28秒 状态: success

🚨 错误信息

python line-mode.py Traceback (most recent call last): File "/home/topsci/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 773, in urlopen self._prepare_proxy(conn) File "/home/topsci/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 1042, in _prepare_proxy conn.connect() File "/home/topsci/miniforge3/lib/python3.12/site-packages/urllib3/connection.py", line 741, in connect sock_and_verified = _ssl_wrap_socket_and_match_hostname( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/site-packages/urllib3/connection.py", line 920, in _ssl_wrap_socket_and_match_hostname ssl_sock = ssl_wrap_socket( ^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/site-packages/urllib3/util/ssl_.py", line 480, in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/site-packages/urllib3/util/ssl_.py", line 524, in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/ssl.py", line 455, in wrap_socket return self.sslsocket_class._create( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/ssl.py", line 1041, in _create self.do_handshake() File "/home/topsci/miniforge3/lib/python3.12/ssl.py", line 1319, in do_handshake self._sslobj.do_handshake() ConnectionResetError: [Errno 104] Connection reset by peer During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/topsci/miniforge3/lib/python3.12/site-packages/requests/adapters.py", line 667, in send resp = conn.urlopen( ^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 841, in urlopen retries = retries.increment( ^^^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/site-packages/urllib3/util/retry.py", line 474, in increment raise reraise(type(error), error, _stacktrace) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/site-packages/urllib3/util/util.py", line 38, in reraise raise value.with_traceback(tb) File "/home/topsci/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 773, in urlopen self._prepare_proxy(conn) File "/home/topsci/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 1042, in _prepare_proxy conn.connect() File "/home/topsci/miniforge3/lib/python3.12/site-packages/urllib3/connection.py", line 741, in connect sock_and_verified = _ssl_wrap_socket_and_match_hostname( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/site-packages/urllib3/connection.py", line 920, in _ssl_wrap_socket_and_match_hostname ssl_sock = ssl_wrap_socket( ^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/site-packages/urllib3/util/ssl_.py", line 480, in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/site-packages/urllib3/util/ssl_.py", line 524, in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/ssl.py", line 455, in wrap_socket return self.sslsocket_class._create( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/ssl.py", line 1041, in _create self.do_handshake() File "/home/topsci/miniforge3/lib/python3.12/ssl.py", line 1319, in do_handshake self._sslobj.do_handshake() urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/topsci/Desktop/langGraph/在线大模型测试/line-mode.py", line 30, in <module> response = requests.post(url, headers=headers, data=payload) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/site-packages/requests/api.py", line 115, in post return request("post", url, data=data, json=json, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/site-packages/requests/api.py", line 59, in request return session.request(method=method, url=url, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/site-packages/requests/sessions.py", line 589, in request resp = self.send(prep, **send_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/site-packages/requests/sessions.py", line 703, in send r = adapter.send(request, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/topsci/miniforge3/lib/python3.12/site-packages/requests/adapters.py", line 682, in send raise ConnectionError(err, request=request) requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))

🤖 AI解决方案

错误翻译

ConnectionResetError: [Errno 104] Connection reset by peer
连接被对端重置

requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))
请求连接错误:连接被中止(对端重置连接)

原因分析

目标服务器在SSL握手过程中主动断开了连接,通常由于:
  • 服务器拒绝请求(IP限制、频率限制、认证失败)
  • 服务器负载过高或网络不稳定
  • TLS版本/加密套件不兼容
  • 解决方案

    方案1:添加重试机制(推荐)

    import requests
    from requests.adapters import HTTPAdapter
    from requests.packages.urllib3.util.retry import Retry
    
    # 配置重试策略
    retry_strategy = Retry(
        total=3,  # 最大重试次数
        backoff_factor=1,  # 重试间隔
        status_forcelist=[429, 500, 502, 503, 504],  # 遇到这些状态码重试
        allowed_methods=["POST"]  # 只对POST方法重试
    )
    
    # 创建会话并挂载适配器
    session = requests.Session()
    adapter = HTTPAdapter(max_retries=retry_strategy)
    session.mount("http://", adapter)
    session.mount("https://", adapter)
    
    # 使用会话发送请求
    response = session.post(url, headers=headers, data=payload, timeout=30)

    方案2:添加超时和异常处理

    import requests
    import time
    
    try:
        # 设置超时并添加延迟
        time.sleep(1)  # 避免过快请求
        response = requests.post(url, headers=headers, data=payload, timeout=30)
        response.raise_for_status()  # 检查HTTP状态码
    except requests.exceptions.ConnectionError:
        print("连接错误,请检查网络或稍后重试")
    except requests.exceptions.Timeout:
        print("请求超时,请检查网络连接")
    except requests.exceptions.HTTPError as e:
        print(f"HTTP错误: {e}")

    预防措施

  • 设置合理的超时时间:所有网络请求必须设置timeout参数
  • 实现指数退避重试:对于临时性网络问题,使用带退避的重试机制
  • 添加请求间隔:高频率请求时添加适当延迟避免触发限制

关键修复点:添加重试机制和超时设置,增强网络请求的鲁棒性。