使用邮递员的 GET 请求有效,但不适用于 python (HTTPSConnectionPool)

Posted

技术标签:

【中文标题】使用邮递员的 GET 请求有效,但不适用于 python (HTTPSConnectionPool)【英文标题】:GET request with postman is working, but it does not work with 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'

            )

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

提前致谢!

编辑1:

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

【问题讨论】:

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

【讨论】:

以上是关于使用邮递员的 GET 请求有效,但不适用于 python (HTTPSConnectionPool)的主要内容,如果未能解决你的问题,请参考以下文章

POST 请求适用于 Postman,但不适用于 Guzzle

Laravel 请求验证不适用于邮递员请求

Ajax POST 不适用于 spring security csrf,但 GET 方法有效

我的 post route 不起作用,postman 认为是 GET 请求

使用标头参数的邮递员授权工作但不适用于 Axios 标头

Api 与 Postman 一起工作,但不适用于 android 应用程序