Ответ 1
Вот полностью закодированный ответ. Идея решения такова:
- вам нужно сначала посетить страницу входа с GET, чтобы получить файл cookie, сгенерированный,
- затем проанализировать токен CSRF из файла файлов cookie
- и выполните вход с помощью запроса POST, передав данные с помощью
-d
.
Затем вы можете выполнять любой запрос, всегда используя этот токен CSRF в данных ($DJANGO_TOKEN
) или с помощью пользовательского X-CSRFToken
заголовка. Чтобы выйти из системы, просто удалите файл cookie.
Обратите внимание, что вам нужен референт (-e
), чтобы сделать проверки Django CSRF счастливыми.
LOGIN_URL=https://yourdjangowebsite.com/login/
YOUR_USER='username'
YOUR_PASS='password'
COOKIES=cookies.txt
CURL_BIN="curl -s -c $COOKIES -b $COOKIES -e $LOGIN_URL"
echo -n "Django Auth: get csrftoken ..."
$CURL_BIN $LOGIN_URL > /dev/null
DJANGO_TOKEN="csrfmiddlewaretoken=$(grep csrftoken $COOKIES | sed 's/^.*csrftoken\s*//')"
echo -n " perform login ..."
$CURL_BIN \
-d "$DJANGO_TOKEN&username=$YOUR_USER&password=$YOUR_PASS" \
-X POST $LOGIN_URL
echo -n " do something while logged in ..."
$CURL_BIN \
-d "$DJANGO_TOKEN&..." \
-X POST https://yourdjangowebsite.com/whatever/
echo " logout"
rm $COOKIES
У меня есть немного более безопасная версия этого кода, которая использует файл для отправки данных POST, как Gist на GitHub: django-csrftoken-login-demo.bash
Интересное фоновое чтение на токене Django CSRF находится на docs.djangoproject.com.