【问题标题】:GET request with postman is working, but it does not work with python (HTTPSConnectionPool)使用邮递员的 GET 请求有效,但不适用于 python (HTTPSConnectionPool)
【发布时间】:2019-08-28 21:29:58
【问题描述】:

我正在尝试从 API 获取 JSON,然后可以在使用 django 构建的网站上显示该 API,并且 API 是使用 rest_framework 制作的。我已经尝试过 Requests 和 http.client 但我得到了同样的错误:

HTTPSConnectionPool(host='webpageUrl' port=443):最大重试次数超出了 url:/api/donations(由 ConnectTimeoutError 引起(

我尝试在 Postman 中使用 GET 请求进行调试,效果很好,但是当我使用 Requests 库文档中提供的示例或使用 Postman 中生成的代码 sn-p 时,我得到了上述错误。此外,我之前有基本身份验证,我认为这是问题的根源,因此我关闭了身份验证但它不起作用。

这是我目前正在尝试的代码:

import requests

def available_donations(request):

    assert isinstance(request,HttpRequest)
    response = requests.get("webpageUrl/api/donations", headers={'Content-Type':'application/json'}, timeout=5)

    return render(
        request,
        'app/availableDonations.html', {'donation':response},
        {
            'title':'Overview of available donations'

            })

我预计会收到有关网页呈现的错误,但是从我可以从不同的 stackoverflow 问题中读取到的错误意味着它找不到网页。

提前致谢!

编辑1:

我尝试在我的个人计算机上运行来自邮递员的 sn-p 代码,它可以工作。我认为问题在于它无法使用我使用的方法向 API(位于同一台服务器上)发出 HTTP 请求。此外,我尝试使用这种有效的方法运行不同的虚拟 API。

【问题讨论】:

  • postman 中有 SSL 验证设置。如果你把它关掉,这个请求在邮递员中仍然有效吗?
  • 我尝试在 Postman 中关闭 SSL 证书验证,但它仍然有效。
  • 几个问题:python 代码是否在您运行 Postman 的同一台机器上运行?它是在本地运行还是在容器或虚拟机中运行?这听起来更像是网络问题,而不是 Python / 请求问题。
  • python代码运行在不同机器上的Linux服务器上,邮递员在我的个人电脑上

标签: python django django-rest-framework python-requests postman


【解决方案1】:

我发现我使用的方法对内部 HTTPS 请求无效。我使用 ifconfig 查看本地 IP 地址,并使用它代替主机并将 IP 地址放在 settings.py 中的 ALLOWED_HOSTS 中。此外,我使用 verify=False 禁用了 SSL 验证

def getDonations():

    url = "https://172.19.10.5/api/donations"
    payload = ""
    headers = {
    'cache-control': "no-cache",
    }

    response = requests.request("GET", url, data=payload, headers=headers, timeout=5, verify=False)
    print(response.text)
    return response.text

【讨论】:

    【解决方案2】:

    尝试验证会话

    session = requests.Session()
    session.verify = True
    
    session.get("webpageUrl/api/donations", headers={'Content-Type':'application/json'}, timeout=5, verify=True)
    

    【讨论】:

      猜你喜欢
      • 2020-11-08
      • 2019-08-25
      • 2020-11-23
      • 2021-10-06
      • 2019-07-03
      • 2018-03-29
      • 2017-08-21
      • 2021-03-29
      • 1970-01-01
      相关资源
      最近更新 更多