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

Python调用MLB Stats API遇SSL证书验证失败问题求助

问题描述

运行以下MLB statsapi代码时触发SSLCertVerificationError,错误提示certificate verify failed: unable to get local issuer certificate,同时Conda更新等网络操作也出现同类SSL证书验证失败问题:

import pandas as pd
from pandas import DataFrame
import statsapi

box_score = statsapi.boxscore(565997)
print(box_score)

已尝试升级certifi库,了解到可通过ssl_verify指定证书文件但无法找到对应文件,不想使用verify=False的不安全临时方案,寻求安全有效的解决办法。

安全解决方法

1. 更新系统根证书

这类问题大多因系统根证书库未包含目标网站的签发机构证书,优先更新系统根证书:

  • Windows:打开「设置」→「更新和安全」→「Windows更新」,检查并安装所有更新(包括可选的根证书更新);或手动安装微软官方提供的根证书更新包
  • macOS:打开「系统设置」→「通用」→「关于本机」→「软件更新」,安装系统更新;或在「钥匙串访问」中选择「系统根证书」,右键点击缺失/过期证书选择「更新证书」
  • Linux(Debian/Ubuntu):执行以下命令更新证书库:
    sudo apt update && sudo apt install --reinstall ca-certificates
    sudo update-ca-certificates
    
  • Linux(RHEL/CentOS):执行以下命令:
    sudo yum update ca-certificates
    sudo update-ca-trust extract
    

2. 让Python/Conda使用系统根证书

Python配置

Python默认使用certifi库自带的证书,可强制其使用系统根证书:

  • 设置环境变量(永久生效可添加到系统配置文件):
    # Linux/macOS终端
    export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
    export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
    
    # Windows命令提示符
    set SSL_CERT_FILE=C:\Windows\System32\certificates\root\ca-bundle.pem
    set REQUESTS_CA_BUNDLE=C:\Windows\System32\certificates\root\ca-bundle.pem
    
    # Windows PowerShell
    $env:SSL_CERT_FILE = "C:\Windows\System32\certificates\root\ca-bundle.pem"
    $env:REQUESTS_CA_BUNDLE = "C:\Windows\System32\certificates\root\ca-bundle.pem"
    
  • 或在代码中挂载自定义SSL上下文(以Linux为例):
    import ssl
    import statsapi
    import requests
    
    # 替换为对应系统的根证书路径
    ssl_context = ssl.create_default_context(cafile='/etc/ssl/certs/ca-certificates.crt')
    # 为statsapi的请求会话挂载SSL上下文
    statsapi.session.mount('https://', requests.adapters.HTTPAdapter(ssl_context=ssl_context))
    
    box_score = statsapi.boxscore(565997)
    print(box_score)
    

Conda配置

修改Conda配置,让其使用系统根证书:

  • 编辑.condarc文件(Linux/macOS路径为~/.condarc,Windows路径为C:\Users\<你的用户名>\.condarc),添加或修改:
    ssl_verify: true
    # 也可直接指定系统证书路径,例如:
    # ssl_verify: /etc/ssl/certs/ca-certificates.crt  # Linux
    # ssl_verify: C:\Windows\System32\certificates\root\ca-bundle.pem  # Windows
    
  • 或通过命令行设置:
    conda config --set ssl_verify true
    # 若需指定路径:
    # conda config --set ssl_verify /etc/ssl/certs/ca-certificates.crt
    

3. 手动导出目标网站证书并指定

若系统更新后仍未解决,可手动导出MLB statsapi目标网站的证书:

  1. 打开浏览器访问https://statsapi.mlb.com,点击地址栏的锁形图标,选择「证书」
  2. 切换到「详细信息」标签页,点击「复制到文件」,选择Base64编码的X.509格式,保存为mlb_cert.pem
  3. 在Python代码中指定该证书:
import ssl
import statsapi
import requests

ssl_context = ssl.create_default_context(cafile='./mlb_cert.pem')
statsapi.session.mount('https://statsapi.mlb.com', requests.adapters.HTTPAdapter(ssl_context=ssl_context))

box_score = statsapi.boxscore(565997)
print(box_score)
  1. 对于Conda,可将证书路径配置到ssl_verify:
conda config --set ssl_verify ./mlb_cert.pem

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 05:13:14