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

Python调用Rest-API遇FileNotFoundError问题求助

问题描述

我正在用Python调用Rest API,这些API在Postman里测试都正常,但在Windows CMD运行Python脚本时碰到证书相关错误。进一步调试发现,哪怕是简单的import requests; print('Hello, world!')或者pip install requests都会触发同样的错误,推测问题出在模块导入机制而非代码本身。下面是我的代码和完整报错栈,请问要做哪些修改才能解决?

代码
import requests
import certifi
from urllib.request import urlopen
import ssl

requestCert = 'https://someurl.com:4443/api/11/projects/'
urlopen(requestCert, context=ssl.create_default_context(cafile=certifi.where()))

headers = {
    "Authorization": "fdsfsfdewrwerwer",
    "X-Auth-Token": "YxzcfhnkniGVGljghjmwCIGLfhfsfdzxc4o5sSADtaT2"
}

#response = requests.get('https://someurl.com:4443/api/11/projects', headers=headers)
#response = requests.get('https://someurl.com:4443/api/11/projects', headers=headers, verify=certifi.where())
response = requests.get('https://someurl.com:4443/api/11/projects', headers=headers, verify='server.pem')

print(response)
报错栈
Traceback (most recent call last):
  File "C:\Users\eddie\Desktop\PyPoc\Py_Job\importJob.py", line 1, in <module>
    import requests
  File "C:\Users\eddie\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\__init__.py", line 147, in <module>
    from . import packages, utils
  File "C:\Users\eddie\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\utils.py", line 24, in <module>
    from . import certs
  File "C:\Users\eddie\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\certs.py", line 14, in <module>
    from certifi import where
  File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "C:\Users\eddie\AppData\Local\Programs\Python\Python311\Lib\site-packages\wrapt\importer.py", line 177, in _exec_module
    notify_module_loaded(module)
  File "C:\Users\eddie\AppData\Local\Programs\Python\Python311\Lib\site-packages\wrapt\wrappers.py", line 578, in __call__
    return self._self_wrapper(self.__wrapped__, self._self_instance,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\eddie\AppData\Local\Programs\Python\Python311\Lib\site-packages\wrapt\decorators.py", line 470, in _synchronized
    return wrapped(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\eddie\AppData\Local\Programs\Python\Python311\Lib\site-packages\wrapt\importer.py", line 136, in notify_module_loaded
    hook(module)
  File "C:\Users\eddie\AppData\Local\Programs\Python\Python311\Lib\site-packages\certifi_win32\wrapt_certifi.py", line 20, in apply_patches
    certifi_win32.wincerts.CERTIFI_PEM = certifi.where()
                                         ^^^^^^^^^^^^^^^
  File "C:\Users\eddie\AppData\Local\Programs\Python\Python311\Lib\site-packages\certifi\core.py", line 37, in where
    _CACERT_PATH = str(_CACERT_CTX.__enter__())
                       ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\eddie\AppData\Local\Programs\Python\Python311\Lib\contextlib.py", line 137, in __enter__
    return next(self.gen)
           ^^^^^^^^^^^^^^
  File "C:\Users\eddie\AppData\Local\Programs\Python\Python311\Lib\importlib\resources\_common.py", line 80, in _tempfile
    os.write(fd, reader())
                 ^^^^^^^^
  File "C:\Users\eddie\AppData\Local\Programs\Python\Python311\Lib\importlib\resources\abc.py", line 76, in read_bytes
    with self.open('rb') as strm:
         ^^^^^^^^^^^^^^^
  File "C:\Users\eddie\AppData\Local\Programs\Python\Python311\Lib\importlib\resources\_adapters.py", line 141, in open
    raise FileNotFoundError("Can't open orphan path")
FileNotFoundError: Can't open orphan path
解决方案

从报错栈来看,问题出在certifi_win32模块对certifi的补丁逻辑上,和Python 3.11的资源导入机制不兼容,导致找不到证书文件路径。可以按以下步骤修复:

  • 卸载certifi_win32模块
    打开CMD运行:

    pip uninstall certifi_win32 -y
    

    这个模块的作用是整合Windows系统证书到certifi,但在Python 3.11环境下存在兼容性问题,是导致导入错误的直接原因。

  • 重新安装certifi和requests
    卸载有问题的模块后,重新安装确保文件完整性:

    pip uninstall certifi requests -y
    pip install certifi requests
    
  • 验证修复效果
    运行简单测试脚本确认导入正常:

    import requests
    print('Hello, world!')
    

    若脚本能正常执行,再测试你的API调用代码。

  • 若API调用仍有证书验证问题
    如果目标API使用自签名证书,确保server.pem文件的路径正确(可以使用绝对路径);或者临时关闭验证(仅用于测试,生产环境禁止):

    response = requests.get('https://someurl.com:4443/api/11/projects', headers=headers, verify=False)
    

    注意:关闭证书验证会带来安全风险,生产环境请使用正确的证书文件或配置可信证书链。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:05:26