Получено 403 Сбой проверки CSRF при входе в систему через запросы python
-
13-12-2019 - |
Вопрос
Я использую Pinax, и я пытаюсь выполнить тест входа в систему на account
проект, использующий requests
модуль.
Я сделал это
def test001_login(self):
#cookies = {'csrftoken': 'a8356fd05b25fad7004994fd5da89596'}
r = requests.post(self.loginurl, data={'username':self.username, 'password': self.password}, auth=(self.username, self.password),allow_redirects=True)
print r.status_code
print r.text
print r.cookies
Возвращенный файл cookie пуст!!С get
методом тыка я получаю печенье.В чем причина этой проблемы?
r.text
результат:
<p>Reason given for failure:</p>
<pre>
No CSRF or session cookie.
</pre>
<p>In general, this can occur when there is a genuine Cross Site Request Forgery, or when
<a
href='http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ref-contrib-csrf'>Django's
CSRF mechanism</a> has not been used correctly. For POST forms, you need to
ensure:</p>
Я попытался вмешаться cookies
но это все равно выдало мне ошибку 403.
Решение
Ваше сообщение не передает токен CSRF для входа в систему.Работает ли это:
r = requests.post(self.loginurl, data={'csrf_token': django.middleware.csrf.get_token(), 'username':self.username, 'password': self.password}, auth=(self.username, self.password),allow_redirects=True)
Другие советы
CSRF работает путем добавления скрытого поля, содержащего изменяющийся токен, в форму, а затем проверки его наличия при публикации формы.Вы получаете эту ошибку, потому что вы не включили токен в сообщение.Вы можете обойти это, или отключить, или использовать "правильные" методы модульного тестирования.
Возможно, стоит поискать Клиент если вы занимаетесь разработкой на основе тестирования