Django Rest Framework отправляет запрос к внешнему API - Ожидаемое значение: строка 1 столбец 1 (char 0)

Я работаю над API для моего приложения, чтобы отправить POST запрос к внешнему API. Например, если мое приложение обратится к конечной точке /myapp/api, я хочу, чтобы оно обратилось к внешнему API и получило некоторые данные. В данном случае мне нужно, чтобы это был POST-запрос, потому что для получения нужных мне данных мне нужно передать некоторые значения.

Я много раз успешно выполнял этот POST вызов непосредственно к внешнему API через Postman, и сейчас я пытаюсь воспроизвести это в своем коде на python.

В моем views.py у меня есть следующее:

class MyAPPViews(APIView):
    def post(self,request):

        crt = 'path/to/crtfile'
        key = 'path/to/keyfile'
        
        #here I tried to reproduce the headers from the postman call 
        #as best as I could just to be extra specific
        headers = {
            'Content-Type': 'application/json',
            'Accept': '/*/',
            'Accept-Encoding': 'gzip,deflate,br',
            'Connection': 'keep-alive'
        }

        payload = {
            "unitList": [
                "CFQU319303"
            ]
        }
        res = requests.post('external/api/url', headers=headers, data=payload, cert=(crt,key))
        print('this is the true http resonse: ',res.status_code)
        data = res.json()
        return Response({"status": "success", "data": data})

в моем urls.py у меня есть это

path('externalAPI',MyAPPViews.as_view()),

Теперь, когда я пытаюсь зайти в postman и нажимаю http://127.0.0.1:8000/myapp/externalAPI. я получаю в ответ код состояния 500 и ошибку JSONDecodeError of Expecting value: line 1 column 1 (char 0). Я понимаю, что это означает, что в основном ответ json был пуст и ему нечего было разбирать.

Есть ли что-то откровенно неправильное в моем коде views.py?

Я бы сказал, что это просто неправильный URL в вашем вызове внешнего API, так как вы используете некоторый путь без домена. Поэтому вместо

res = requests.post('external/api/url', headers=headers, data=payload, cert=(crt,key))

должно быть что-л. похожее

res = requests.post('https://SOMEDOMAIN.ORG/external/api/url', headers=headers, data=payload, cert=(crt,key))

Вместе с res = requests.post('external/api/url', headers=headers, data=payload, cert=(crt,key)) мне пришлось изменить data=payload на data=json.dumps(payload). Я предполагаю, что ему не понравилось, как я отформатировал свою полезную нагрузку изначально. После этого я также удалил все, кроме Content-Type: application/json, из моего headers словаря.

Вернуться на верх