当前位置: 首页 > 知识库问答 >
问题:

如何卷曲已验证的Django应用程序?

戚默
2023-03-14

我有几个API要用cURL测试。我试着做一个如下的GET:

curl --user username:password --request GET http://my_domain/get_result/52d6428f3ea9a008358ad2d8/

在服务器上,它显示了一个“302”(这意味着重定向,对吗?)。我猜它被重定向到了“login/”页面。

正确的方法是什么?

编辑:我试过:

curl -c cookies.txt -b cookies.txt -L -d @login_form.txt http://my_domain/login/

这里是登录表单。txt包含“用户名=用户名”

共有3个答案

宋正真
2023-03-14

实际上@Paterino的答案是正确的,但它不会在每一个实现的sed工作。取而代之的se's/^.*csrfToken\s*//')我们可以使用se's/^.*csrfToken[[:空白:]]*//')这是更老式的。MacOSX的curl不使用转义,所以\n\t\s根本不起作用。

丌官霖
2023-03-14

在curl请求中传递用户名:密码只适用于HTTP身份验证,这不是现在大多数网站的身份验证方式。相反,您必须发布到登录页面,获取cookie,然后在请求所需页面时将其传回。

廖弘伟
2023-03-14

这是一个完全编码的答案。解决方案的理念是:

  1. 您必须首先使用GET访问登录页面,才能生成cookies文件。

之后,您可以始终使用数据中的CSRF令牌($DJANGO_令牌)或自定义的X-CSRFToken头执行任何请求。要注销,只需删除cookies文件。

请注意,您需要一个裁判(-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:django csrftoken登录演示的要点。猛击

关于Django的CSRF令牌的有趣背景阅读在docs上。Django项目。通用域名格式。

 类似资料:
  • 问题内容: 我想使用cURL测试一些API。我尝试执行GET,如下所示: 在服务器上,它显示为“ 302”(表示重定向,对吧?)。我猜它重定向到“登录/”页面。 完成这项工作的正确方法是什么? 编辑:我试过: 其中login_form.txt包含“ username = username&password = password&this_is_the_login_form = 1”。不起作用 没有

  • 问题内容: 我已在中注释掉了csrf处理器和中间件产品线 但是,当我使用Ajax发送请求时,Django仍然会响应“ csrf令牌不正确或丢失”,并且在将X-CSRFToken添加到标头后,请求将会成功。 这里发生了什么 ? 问题答案: 如果只需要一些视图而不使用CSRF,则可以使用@csrf_exempt:

  • 我正在尝试使用Facebook凭据实现网站登录。当我在Facebook小部件上按“取消”或“确定”时,我会看到不同的反应。当我按Cancel时,我看到以下内容 这是可预测的。但是当我按OK时,我看到另一个错误。 我在本地运行的网站Ubuntu 14.04 apache Web服务器与80端口。我怀疑错误的Facebook应用程序设置,但不知道调试什么。 此外,我可以提到推特登录也在相同的设置下工作

  • 问题内容: 假设我有一个模型,并且想验证是否 可以添加s个以上的代码: 但是,试图保存时, 一个 因为超过最大递归深度被抛出。 错误如下: 它发生在行中。 显然,在保存模型时,Django的复杂性根本不允许您验证m2m关系。那我该如何验证它们呢? 问题答案: 您 永远无法 使用模型的干净方法来验证关系。这是因为在清理时间,该模型可能不存在,就像您的购物篮一样。不存在的东西,也可能没有关系。 您要么

  • 我正在构建谷歌应用程序脚本产品,当我部署GAS项目时,我只想让我的组织中的人可以访问该应用程序。当用户已经用我的组织电子邮件登录时,浏览器就可以了。但是我如何通过邮递员或终端访问部署的URL,我需要访问令牌或其他东西吗?欢迎提供任何建议! 欢迎提供任何建议!

  • 我正在开发一个webapp,用户可以登录查看他们的在线酒窖。 我已经安装了Django REST模型,以及Angular的前端设计,但我很难将这些部分放在一起,我的主要问题是用户身份验证。 null 提前致谢