我想使用cURL测试一些API。我尝试执行GET,如下所示:
curl --user username:password --request GET http://my_domain/get_result/52d6428f3ea9a008358ad2d8/
在服务器上,它显示为“ 302”(表示重定向,对吧?)。我猜测它已重定向到“登录/”页面。
完成这项工作的正确方法是什么?
编辑:我试过:
curl -c cookies.txt -b cookies.txt -L -d @login_form.txt http://my_domain/login/
其中login_form.txt包含“ username = username&password = password&this_is_the_login_form = 1”。不起作用 没有生成cookies.txt文件。而且没有登录发生。您能告诉我如何使用cURL实现登录Django吗?
这是一个完整的编码答案。解决方案的想法是:
-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.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数据,作为GitHub上的Gist:django-csrftoken-login-demo.bash
有趣的关于Django CSRF令牌的背景知识在docs.djangoproject.com上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句