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

使用Python requests库访问URL时遇requests.exceptions.SSLError错误求助

解决Python requests访问越南商业银行API的SSL错误问题

问题原因

目标服务器启用了不安全的旧版SSL重协商协议,而Python 3.12的默认SSL配置为了安全,禁用了这种协商方式,导致连接失败。浏览器能正常访问是因为它默认兼容这类老服务器的配置。

解决方案

自定义SSL上下文,允许旧版重协商机制,再通过适配器挂载到requests会话中,具体代码如下:

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

class LegacySSLAdapter(HTTPAdapter):
    def init_poolmanager(self, *args, **kwargs):
        ctx = ssl.create_default_context()
        # 启用允许旧版SSL重协商的选项
        ctx.options |= ssl.OP_LEGACY_SERVER_CONNECT
        kwargs['ssl_context'] = ctx
        return super().init_poolmanager(*args, **kwargs)

URL = "https://portal.vietcombank.com.vn/Usercontrols/TVPortal.TyGia/pXML.aspx"

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 Edg/118.0.2088.46"
}

# 创建会话并挂载自定义适配器
session = requests.Session()
session.mount("https://", LegacySSLAdapter())

try:
    res = session.get(URL, timeout=10, headers=headers)
    res.raise_for_status()
    print(f"请求成功,状态码:{res.status_code}")
    # 如需查看返回的XML内容,取消注释下面一行
    # print(res.text)
except requests.exceptions.RequestException as e:
    print(f"请求失败:{str(e)}")

代码说明

  • 自定义LegacySSLAdapter适配器,重写连接池初始化方法,添加允许旧版重协商的SSL上下文配置。
  • 使用requests.Session挂载适配器,确保所有HTTPS请求都采用该自定义SSL配置。
  • 加入异常处理,便于快速定位请求过程中的问题。

注意:该配置是为兼容旧服务器的临时方案,存在一定安全风险,若后续服务器更新SSL配置,建议移除该选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:17:22