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

使用requests库时偶发SSLCertVerificationError问题求助

使用requests库时偶发SSLCertVerificationError问题求助

大家好,我遇到一个特别奇怪的问题:调用接口时偶发出现SSLCertVerificationError,不是每次都会报错——比如第一次请求完全正常,但第二次就可能触发这个错误。

目前我已经做了这些尝试:

  • 安装了certifi库
  • 设置了SSL_CERT_FILE环境变量

实在搞不懂为什么这个错误是间歇性出现的,有没有大佬能给点思路?谢谢!

以下是完整的报错栈信息:

Traceback (most recent call last):
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/fastapi/applications.py", line 1054, in __call__
    await super().__call__(scope, receive, send)
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/starlette/applications.py", line 113, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/starlette/middleware/errors.py", line 187, in __call__
    raise exc
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/starlette/middleware/errors.py", line 165, in __call__
    await self.app(scope, receive, _send)
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/starlette/routing.py", line 715, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/starlette/routing.py", line 735, in app
    await route.handle(scope, receive, send)
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/starlette/routing.py", line 288, in handle
    await self.app(scope, receive, send)
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/starlette/routing.py", line 76, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/starlette/routing.py", line 73, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/fastapi/routing.py", line 301, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/fastapi/routing.py", line 214, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/starlette/concurrency.py", line 39, in run_in_threadpool
    return await anyio.to_thread.run_sync(func, *args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/anyio/to_thread.py", line 56, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2461, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 962, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/dde/llm/wiki/app.py", line 48, in get_table_metadata
    page_content = get_page_content(space, table_name.upper())
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/backoff/_sync.py", line 105, in retry
    ret = target(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/dde/utils/wiki.py", line 22, in get_page_content
    page = confluence.get_page_by_title(space, title, expand='body.storage', start=None, limit=None)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/atlassian/confluence.py", line 334, in get_page_by_title
    response = self.get(url, params=params)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/atlassian/rest_client.py", line 436, in get
    response = self.request(
               ^^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/atlassian/rest_client.py", line 383, in request
    response = self._session.request(
               ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/requests/sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/requests/sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jianfezhang/github/metadata-repo/data-discovery-exp/.venv/lib/python3.11/site-packages/requests/adapters.py", line 698, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='wiki.corp.xxx.com', port=443): Max retries exceeded with url: /rest/api/content?type=page&expand=body.storage&spaceKey=DBC&title=SRCH_SRP_TOOL_EVENT_FACT (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1006)')))

一些可能的排查方向(供参考)

  • 检查目标服务器的证书配置:有些服务器会配置多组证书或自动轮换证书,不同请求可能命中不同证书,如果其中某组证书的信任链不完整,就会偶发报错
  • 确认多线程环境下环境变量的有效性:你的服务是FastAPI+Uvicorn的多线程架构,可能存在SSL_CERT_FILE环境变量未在所有线程中正确加载的情况,可以在请求前打印os.environ.get('SSL_CERT_FILE')验证
  • 检查certifi根证书是否包含目标服务器的CA:用certifi.where()获取certifi的证书路径,再通过openssl命令验证该证书是否信任目标服务器的证书
  • 尝试禁用连接复用:requests的会话会复用连接,可能导致某些连接的证书验证状态异常,可以尝试每次请求新建会话,或在会话中强制刷新证书验证配置

备注:内容来源于stack exchange,提问作者zjffdu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 03:20:01