我对 API 没有太多经验,所以这个问题的答案对某些人来说可能是显而易见的。我在一个项目中使用 RapidAPI 的 Skyscanner API,每当我在 RapidAPI API 游乐场中测试端点时,它似乎工作得很好。但是,当我将代码(不进行任何更改)复制到 IDE 时,它会抛出一堆错误,特别是“证书验证失败”错误。这是我使用的代码(为了本文的目的,我替换了密钥):
import requests
url = "https://skyscanner44.p.rapidapi.com/search"
querystring = {"adults":"1",
"origin":"LAX",
"destination":"DCA",
"departureDate":"2022-08-01",
"returnDate":"2022-08-15",
"cabinClass":"economy",
"currency":"USD"}
headers = {
"X-RapidAPI-Key": "XXX",
"X-RapidAPI-Host": "skyscanner44.p.rapidapi.com"
}
response = requests.request("GET", url, headers=headers, params=querystring)
print(response.text)
这是它抛出的错误:
Traceback (most recent call last):
File "C:\Users\624237\Anaconda3\envs\atmsTesting\lib\site-packages\urllib3\connectionpool.py", line 703, in urlopen
httplib_response = self._make_request(
File "C:\Users\624237\Anaconda3\envs\atmsTesting\lib\site-packages\urllib3\connectionpool.py", line 386, in _make_request
self._validate_conn(conn)
File "C:\Users\624237\Anaconda3\envs\atmsTesting\lib\site-packages\urllib3\connectionpool.py", line 1040, in _validate_conn
conn.connect()
File "C:\Users\624237\Anaconda3\envs\atmsTesting\lib\site-packages\urllib3\connection.py", line 414, in connect
self.sock = ssl_wrap_socket(
File "C:\Users\624237\Anaconda3\envs\atmsTesting\lib\site-packages\urllib3\util\ssl_.py", line 449, in ssl_wrap_socket
ssl_sock = _ssl_wrap_socket_impl(
File "C:\Users\624237\Anaconda3\envs\atmsTesting\lib\site-packages\urllib3\util\ssl_.py", line 493, in _ssl_wrap_socket_impl
return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
File "C:\Users\624237\Anaconda3\envs\atmsTesting\lib\ssl.py", line 512, in wrap_socket
return self.sslsocket_class._create(
File "C:\Users\624237\Anaconda3\envs\atmsTesting\lib\ssl.py", line 1070, in _create
self.do_handshake()
File "C:\Users\624237\Anaconda3\envs\atmsTesting\lib\ssl.py", line 1341, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:997)
非常感谢任何帮助!
“证书验证失败”错误表示你的 Python 环境无法验证 RapidAPI 的 SSL 证书的有效性。这通常发生在你使用 IDE 时,因为它可能没有配置为使用与你的系统相同的根证书。
你可以尝试以下几种方法来解决此问题:
1. 更新证书存储:
- 对于你的操作系统: 确保你的操作系统是最新的,因为它通常包括对根证书的更新。
-
对于你的 Python 环境: 你可以尝试使用
certifi
包更新你的证书存储。certifi
是一个 Python 包,它提供 Mozilla 的证书颁发机构 (CA) 捆绑包,用于验证 SSL 证书。bash pip install --upgrade certifi
然后,你可以像这样在你的代码中使用
certifi
:```python import requests import certifi
url = "https://skyscanner44.p.rapidapi.com/search"
# ... (你的其他代码)
response = requests.request("GET", url, headers=headers, params=querystring, verify=certifi.where())
print(response.text) ```
2. 禁用证书验证(不推荐):
警告: 禁用证书验证会使你的应用程序面临安全风险,并且只应该在测试或开发环境中作为最后的手段使用。
你可以通过将
verify
参数设置为
False
来在你的请求中禁用证书验证:
python
response = requests.request("GET", url, headers=headers, params=querystring, verify=False)
如果你选择禁用证书验证,你可能会收到
InsecureRequestWarning
警告。你可以像这样抑制此警告:
```python import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) ```
3. 配置你的 IDE 以使用系统的证书存储:
某些 IDE 允许你配置它们以使用系统的证书存储,而不是它们自己的证书存储。参考你的 IDE 文档了解如何执行此操作。
通过应用这些解决方案之一,你应该能够解决“证书验证失败”错误并从你的 IDE 成功发出 API 请求。
标签:python,python-requests,rapidapi From: 72901712