gpt4 book ai didi

django - 如何将 curl 与 Django、csrf token 和 POST 请求一起使用

转载 作者:行者123 更新时间:2023-11-28 19:34:52 28 4
gpt4 key购买 nike

我正在使用 curl 来测试我的一个 Django 表单。我尝试过的调用(每个调用都有错误,并且为了便于阅读而跨越多行):

(1):

curl
-d "{\"email\":\"test@test.com\"}"
--header "X-CSRFToken: [triple checked value from the source code of a page I already loaded from my Django app]"
--cookie "csrftoken=[same csrf value as above]"
http://127.0.0.1:8083/registrations/register/

(带有 cookie 中的 http header 和 csrftoken)导致 400 错误,没有返回任何数据。

(2):

curl
-d "{a:1}"
--header "X-CSRFToken:[as above]"
--cookie "csrftoken=[as above];sessionid=[from header inspection in Chrome]"
http://127.0.0.1:8083/registrations/register/

(与 (1) 中一样,但 header 属性声明中没有空格,cookie 中也有 sessionid)导致相同的 400 错误,没有返回数据。

(3):

curl
-d "{a:1}"
--header "X-CSRFToken:[as above]"
http://127.0.0.1:8083/registrations/register/

(只有带有 X-CSRFToken 的 http header ,没有 cookie)导致错误代码 403,消息:未设置 CSRF cookie。

如何使用 curl 测试我的表单?除了 cookie 值和 http header 之外,我没有考虑哪些因素?

最佳答案

Damien 的回答和您的示例 2 的混合对我有用。我用了一个简单的登录页面来测试,我希望你的注册 View 是相似的。 Damien 的响应几乎有效,但缺少 sessionid cookie。

我推荐一种更稳健的方法。与其手动输入来自其他请求的 cookie,不如尝试使用 curl 的内置 cookie 管理系统来模拟完整的用户交互。这样,您就可以减少犯错的机会:

$ curl -v -c cookies.txt -b cookies.txt host.com/registrations/register/
$ curl -v -c cookies.txt -b cookies.txt -d "email=user@site.com&a=1&csrfmiddlewaretoken=<token from cookies.txt>" host.com/registrations/register/

第一个 curl 模拟用户首先通过 GET 请求到达页面,并保存所有必要的 cookie。第二个 curl 模拟填写表单字段并将它们作为 POST 发送。请注意,您必须按照 Damien 的建议在 POST 数据中包含 csrfmiddlewaretoken 字段。

关于django - 如何将 curl 与 Django、csrf token 和 POST 请求一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10628275/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com