这是一个完整的编码答案。解决方案的想法是:
- 你必须先使用GET访问登录页面,以生成cookie文件,
- 然后从cookie文件中解析CSRF令牌
- 并使用POST请求进行登录,并通过传递数据
-d
。
之后,你可以始终使用数据($DJANGO_TOKEN
)中的CSRF令牌或自定义X-CSRFToken
标头执行任何请求。要注销,只需删除cookie文件。
请注意,你需要一个Referer(
-e)才能使Django的CSRF检查满意。
LOGIN_URL=https://yourdjangowebsite.com/login/YOUR_USER='username'YOUR_PASS='password'cookieS=cookies.txtCURL_BIN="curl -s -c $cookieS -b $cookieS -e $LOGIN_URL"echo -n "Django Auth: get csrftoken ..."$CURL_BIN $LOGIN_URL > /dev/nullDJANGO_TOKEN="csrfmiddlewaretoken=$(grep csrftoken $cookieS | sed 's/^.*csrftokens*//')"echo -n " perform login ..."$CURL_BIN -d "$DJANGO_TOKEN&username=$YOUR_USER&password=$YOUR_PASS" -X POST $LOGIN_URLecho -n " do something while logged in ..."$CURL_BIN -d "$DJANGO_TOKEN&..." -X POST https://yourdjangowebsite.com/whatever/echo " logout"rm $cookieS



