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

时间:2019-04-07 16:51:17

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

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

HTTPSConnectionPool(host ='webpageUrl'port = 443):URL超过最大重试次数:/ api / donations(由ConnectTimeoutError(

引起)

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

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

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:

我尝试在可以正常运行的个人计算机上运行邮递员提供的代码段。我认为问题在于它无法使用我使用的方法向该API(位于同一服务器上)发出HTTP请求。而且,我尝试使用这种有效的方法来运行不同的虚拟API。

2 个答案:

答案 0 :(得分:0)

尝试验证会话

session = requests.Session()
session.verify = True

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

答案 1 :(得分:0)

我发现我使用的方法对内部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