首页 > 编程问答 >RapidAPI 在浏览器测试中工作,但在我的 IDE 中不工作

RapidAPI 在浏览器测试中工作,但在我的 IDE 中不工作

时间:2024-07-23 05:52:25浏览次数:6  
标签:python python-requests rapidapi

我对 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

相关文章

  • 如何构建一维数组的二维数组的特定 Python 结构?
    如何构建一维数组(即行向量)的二维数组的特定结构以满足特定我正在维护的遗留程序的结构?我可以在此结构中生成正确的内容all_measurements[:12]array([[0.,0.,0.,2.],[0.02,0.334,0.04,2.24],[0.04,0.668,0.08,2.48],...........
  • 如何使用 Python Flask 将新的咖啡馆(元素)添加到数据库(SQLite)?
    这是我的代码:@app.route("/add",methods=["POST"])defpost_new_cafe():new_cafe=Cafe(name=request.form.get("name"),map_url=request.form.get("map_url"),img_url=request.form.get("img......
  • 使用 tkinter 为 python 创建 GUI 时如何解决语法错误?
    我是一名Python初学者,决定使用tkinter制作一个小型GUI,该GUI接受用户(潜在餐馆)的3个输入,然后单击按钮后随机输出其中一家餐馆。我不断收到语法错误,并认为它与我的buttonfunc或调用它的命令有关。此代码尚未包含在GUI上输出餐厅的任何位置。任何帮助将不胜感激#Pyth......
  • 在 python 中打开 gnome 终端立即显示为僵尸
    作为背景,我正在编写一个脚本来训练多个pytorch模型。我有一个训练脚本,我希望能够在gnome终端中作为子进程运行。这样做的主要原因是我可以随时关注训练进度。如果我可能有多个GPU,我想在单独的窗口中多次运行我的训练脚本。为了实现这一点,我一直在使用popen。以下代码用于打......
  • python threading.Condition 的意外行为
    我正在尝试同步多个线程。我期望使用threading.Condition和threading.Barrier时的脚本输出大致相同,但事实并非如此。请解释一下为什么会发生这种情况。一般来说,我需要线程在一个无限循环中执行工作(一些IO操作),但是每个循环都是以主线程的权限开始的,而权限是仅在......
  • Python - 逆透视数据框
    我有一个按日期时间索引的表,每个日期时间都有多个层(中心和交货间隔):日期时间中心交货间隔结算点价格2024-01-0101:00:00休斯顿中心1......
  • 试图理解这个错误:致命的Python错误:PyEval_RestoreThread:该函数必须在持有GIL的情况下
    我有一个小型tkinter应用程序,我一直在其中实现最小的“拖放”,主要作为学习实验。我真正关心的是删除文件的文件路径。一切实际上都工作正常,直到我尝试在拖放后打包标签小部件。下面的最小工作示例。有问题的行会用注释指出。我通常不会在调试方面遇到太多麻烦,但我只是不知......
  • 如何使代码格式再次适用于 Python(Mac 上的 Visual Studio Code)?
    在Mac上,Option+Shift+F现在会显示“没有安装用于‘python’文件的格式化程序”。消息框:我尝试安装这个插件,但没有看到这种情况的变化:我已经为Python安装了这两个插件:但是正如@starball提到的,它可能已经减少了支持现在。......
  • 无法在 python 中安装 pip install expliot - bluepy 的 Building Wheel (pyproject.t
    在此处输入图像描述当我尝试在Windows计算机中通过cmd安装pipinstallexpliot包时,我收到2个错误名称×Buildingwheelforbluepy(pyproject.toml)didnotrunsuccessfully.│exitcode:1**AND**opt=self.warn_dash_deprecation......
  • python 用单斜杠-反斜杠替换url字符串中的双斜杠
    我的URL包含错误的双斜杠(“//”),我需要将其转换为单斜杠。不用说,我想保持“https:”后面的双斜杠不变。可以在字符串中进行此更改的最短Python代码是什么?我一直在尝试使用re.sub,带有冒号否定的正则表达式(即,[^:](//)),但它想要替换整个匹配项(包括前面......