在 Django 服务器上使用 ab(apache 基准测试)发出 POST 请求

Make a POST request using ab (apache benchmarking) on a django server

我正在尝试使用 ab 向使用 django 构建的表单发出 HTTP POST 请求。

我正在使用以下行:

ab -n 10 -C csrftoken=my_token -p ab_file.data -T application/x-www-form-urlencoded http://localhost:8000/

我的 ab_file.data 看起来像这样:

url=my_encoded_url&csrfmiddlewaretoken=my_token

它总是returns一个403状态码。

当我使用相同的参数使用 curl 时,它起作用了。卷曲线:

curl -X POST -d "url=my_encoded_url&csrfmiddlewaretoken=my_token" --cookie "csrftoken=my_token" http://localhost:8000/

我该怎么做?

文件必须有正确的url编码数据。如果您 url-手动编码,很容易出现空格之类的拼写错误编码。最好以编程方式进行。 查看另一个答案:Apache Bench and POST data 关于如何使用 Python 创建此类文件(例如:post.data)

然后使用: ab -T 'application/x-www-form-urlencoded' -n 10 -p post.data http://localhost:8080/

@jacobm654321,

当然,最好的办法是以编程方式对 URL 进行编码。但我的问题不是那个。我的问题是包含 post 数据的文件在文件末尾有一个空行。 EditorConfig 把它放在那里。删除该空行后,一切正常。

谢谢。

使用 ab 时,数据文件的全部内容必须换行到一行 - 如果它正常展开,它会自动失败 JSON。因此,在您执行此操作之前,与 curl 一起正常工作的数据文件中的 post 将因 ab 而失败。

提示:如果使用 Atom 或 VSCode,select 全部并按 Cmd-J 将所有内容换行。