GET запрос с почтальоном работает, но он не работает с питоном (HTTPSConnectionPool) - PullRequest
1 голос
/ 07 апреля 2019

Я пытаюсь получить JSON из API, который затем можно показать на веб-сайте, который построен с помощью django, а API создан с помощью rest_framework.Я пробовал оба запроса и http.client, но я получил ту же ошибку:

HTTPSConnectionPool (host = 'webpageUrl' port = 443): максимальное количество повторов превышено с помощью url: / api / donations (Вызванный ConnectTimeoutError (

Я попытался отладить GET-запросы в Postman, который работает нормально, однако, когда я использую примеры, приведенные в документации библиотеки Requests, или использую фрагмент кода, сгенерированный в Postman Iполучить вышеупомянутую ошибку.Кроме того, у меня ранее была базовая аутентификация, которая, по моему мнению, была причиной проблемы, поэтому я отключил аутентификацию, но она не работала.

Это код, который я сейчас пытаюсь:

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:

Я попытался запустить фрагмент кода изпочтальон на моем персональном компьютере, который работает.Я считаю, что проблема в том, что он не может делать HTTP-запросы к API (который находится на том же сервере) с помощью метода, который я использовал.Более того, я попытался запустить фиктивные разные фиктивные API с помощью этого метода, который работает.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Я обнаружил, что используемый мной метод был недопустим для внутренних запросов HTTPS.Я использовал ifconfig, чтобы увидеть локальный IP-адрес, и использовал его вместо хоста и поместил IP-адрес в ALLOWED_HOSTS в settings.py.Кроме того, я отключил проверку SSL с помощью verify = False

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

0 голосов
/ 07 апреля 2019

Попробуйте проверить сессию

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

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