11

我不想用 locust.io 测试我的 django web 应用程序。在 ha 形式中,我遇到的问题是它使用 CSRF 令牌进行保护。我执行以下操作:

class WebsiteTasks(TaskSet):
    def on_start(self):
        print("On start")

    @task
    def post_answer(self):
        self.client.get("/polls/2/vote")
        self.client.post("/polls/2/vote/", {"choice": "8"})

为什么我会收到403错误消息?该帖子是fobidden的,蝗虫文档说客户端对象使会话保持活动状态..

4

2 回答 2

21

将您的代码更改为:

@task
def post_answer(self):
    response = self.client.get("/polls/2/vote")
    csrftoken = response.cookies['csrftoken']

    self.client.post("/polls/2/vote/", 
                     {"choice": "8"}, 
                     headers={"X-CSRFToken": csrftoken})
于 2014-12-06T21:25:26.543 回答
5

我在针对 Django 1.8.5 运行 Locust 测试时遇到了这个问题,它需要将 csrf 令牌添加到 cookie、标头和表单 POST 数据中,如下所示,以免赶上 403。类似于:

@task
def post_answer(self):
    response = self.client.get("/polls/2/vote")
    csrftoken = response.cookies['csrftoken']

    self.client.post("/polls/2/vote/", {"choice": "8",
                     "csrfmiddlewaretoken": csrftoken}, 
                     headers={"X-CSRFToken": csrftoken},
                     cookies={"csrftoken": csrftoken})
于 2016-05-13T03:55:43.580 回答