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 словаря.