Я пытаюсь сделать пост-запрос к API нашего приложения для некоторого регрессионного тестирования, но по какой-то причине, когда я делаю запрос таким же образом через запросы, он регистрируется и интерпретируется как запрос GET.
КОД:
requests.post({HTTP_PROTOCOL}://{APP_URL}/api/route/',
headers={'Authorization': 'Bearer ' + access_token},
json=DATA)
LOG:
[Thu Jul 11 19:17:30 2019] GET /api/route/ => generated 2 bytes in 64 msecs (HTTP/1.1 200) 5 headers in 162 bytes (1 switches on core 1)
Однако, когда я делаю запрос через Postman, запрос работает совершенно нормально и возвращается с созданным объектом в JSON, а в журналах он записывается как POST.
Бэкэнд в настоящее время написан на Django, используя Django Rest Framework для REST API. Вот маршрут в нашем urls.py
файле:
url(r"^api/route/$", DataListView.as_view())
И я знаю, что DataListView
работает, потому что Почтальон прекрасно с ним работает.
У меня были похожие проблемы, когда это не сработало, потому что я отправлял на маршрут без косой черты, а здесь это не так. Я знаю, что отправляю на маршрут с косой чертой, как вы можете убедиться сами.
ВОПРОС: Как мне заставить это работать? И почему он работает в Postman, но не использует библиотеку requests
?
РЕДАКТИРОВАТЬ 1:
Вот заголовки в запросе, если это дает какие-либо подсказки:
{
'User-Agent': 'python-requests/2.22.0',
'Accept-Encoding': 'gzip, deflate',
'Accept': '*/*',
'Connection': 'keep-alive',
'Authorization': 'Bearer <access-token>'
}
РЕДАКТИРОВАТЬ 2:
Я просто сделал это:
print(resp.request.method)
и распечатано GET
... Понятия не имею почему. Когда я сделал это на моем локальном сервере, он распечатал POST
. Может ли это быть связано с тем, что я отправляю на https://
URL? Это странно.
Начиная с этого , похоже, что это вызывает перенаправление 301 или 302, которое вызывает это.