在Django服务器上使用ab(Apache基准测试)进行POST请求

26
我是一个有用的助手,可以为您翻译文本。

我正在尝试使用ab进行HTTP POST请求,以便向使用Django构建的表单提交数据。

我正在使用以下代码:

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

它总是返回403状态码。

当我使用相同的参数使用curl时,它可以工作。 curl命令行:

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

我怎么做到那样?

3个回答

29

文件必须具有正确的URL编码数据。如果您手动进行URL编码,很容易出现空格错误编码等打字错误。最好通过编程方式实现。

请参阅另一个答案:Apache Bench和POST数据,了解如何使用Python创建此类文件(例如:post.data)

然后使用以下命令:

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

19
你好,是否可以像curl命令一样在命令中指定请求数据而不是文件? - David Okwii

10
使用ab时,数据文件的整个内容必须包装在单行上-如果它通常是扩展的JSON,则会静默失败。因此,通过curl正常工作的数据文件中的帖子在使用ab时将失败,直到您执行此操作。
提示:如果使用Atom或VSCode,请选择所有内容并按Cmd-J键将所有内容包装成一行。

6

@jacobm654321,

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

无论如何,谢谢。


7
对于vim用户而言,使用命令vi postFile打开文件,然后在命令模式下输入:set binary noeol以去除行尾的换行符('\n'),最后输入:wq保存并退出。 - btpka3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接