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
相关产品推荐
相关产品推荐

