Игнорирование перенаправлений при POSTing из модуля Python Requests? - PullRequest
0 голосов
/ 04 декабря 2018

Я использую этот сценарий для доступа к моему серверу Django и получения токена CSRF, который затем просто пытается отправить данные POST в представление:

#!/usr/bin/env python2.7
import sys, time
import requests

username = 'root'
password = 'pass'

fileName, userFolder, uploadFolder = sys.argv

URL = 'http://127.0.0.1:8000/admin/login/'
client = requests.session()

# Retrieve the CSRF token first
client.get(URL)  # sets cookie
if 'csrftoken' in client.cookies:
    csrftoken = client.cookies['csrftoken']

login_data = dict(username=username, password=password, csrfmiddlewaretoken=csrftoken, next='')
r = client.post(URL, data=login_data, headers=dict(Referer=URL))

Но в журнале доступа моего сервера разработки Django я вижу:

[03/Dec/2018 17:44:17] "GET /admin/login/ HTTP/1.1" 200 1637
[03/Dec/2018 17:44:17] "POST /admin/login/ HTTP/1.1" 302 0
Not Found: /accounts/profile/
[03/Dec/2018 17:44:17] "GET /accounts/profile/ HTTP/1.1" 404 9904

Чего я не понимаю, так это почему я продолжаю получать дополнительные Get и 404?

Можно ли настроить мой запрос Python на игнорирование любого вида сигнала перенаправления независимо от того, является ли он дляGET или POST или session.get()?

Я пытался добавить allow_redirects=False к client.get(URL, allow_redirects=False), но это не помогло.

Мои POST работают нормально, я просто пытаюсь устранитьдополнительный запрос GET и ненужный беспорядок / накладные расходы.

Спасибо.

1 Ответ

0 голосов
/ 04 декабря 2018

По умолчанию Django перенаправляет на /accounts/profile/ после успешного входа в систему.

Чтобы остановить запросы от повторного перенаправления, вы должны использовать allow_redirects=False в вызове session.post().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...