为啥我在运行 Locust 时收到 403 错误?
Posted
技术标签:
【中文标题】为啥我在运行 Locust 时收到 403 错误?【英文标题】:Why am I getting a 403 error when running Locust?为什么我在运行 Locust 时收到 403 错误? 【发布时间】:2015-01-31 09:45:43 【问题描述】:我正在使用Locust (python) 在 Django Web 应用程序上加载测试。我在运行脚本时不断收到 403 错误。
代码如下:
from locust import HttpLocust, TaskSet
def index(l):
l.client.get("/")
def login(l):
l.client.post("/login/", "username":"an@id.com", "password":"education")
def upload(l):
l.client.get("/upload-image/")
def home(l):
l.client.get("/home/")
def settings(l):
l.client.get("/settings/")
def logout(l):
l.client.get("/logout/")
class UserBehavior(TaskSet):
tasks = index:1, upload:1, home:1, settings:1, logout:1
def on_start(self):
login(self)
class WebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait=5000
max_wait=9000
【问题讨论】:
状态 403 表示禁止,因此您的凭据错误。用户不存在或者您忘记将 CSRF 令牌传递给您的视图。 怎么传入crsf token 请注意,将注销作为任务意味着 Locust 有时会选择它,然后您将有未经授权的客户端尝试与您的应用程序交互,您将再次遇到 401/403 错误。 【参考方案1】:要扩展 ZacDelagrange 的答案,当您使用 https 时,您还必须设置 Referer 标头,因此在此示例中您可以这样做
def on_start(self):
""" Run on start for every Locust hatched """
r = self.client.get('')
self.client.headers['Referer'] = self.client.base_url
self.client.post('/accounts/login/',
'email': 'email', 'password': 'password',
'csrfmiddlewaretoken': r.cookies['csrftoken'])
【讨论】:
谢谢,在我阅读您的回答之前,我认为推荐人是我的问题。【参考方案2】:在您的根页面或登录页面上获取,从响应 cookie 中获取 csrf 令牌,然后使用 csrftoken 发布到您的登录 url。这应该将 csrf 令牌添加到客户端的 cookie 中并允许您浏览页面。
def on_start(self):
""" Run on start for every Locust hatched """
r = self.client.get('')
self.client.post('/accounts/login/',
'email': 'email', 'password': 'password',
'csrfmiddlewaretoken': r.cookies['csrftoken'])
【讨论】:
以上是关于为啥我在运行 Locust 时收到 403 错误?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在本地使用 codeigniter 会收到 403 Forbidden 错误?