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

her*_*ara 13 django post apachebench

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

我正在使用以下行:

ab -n 10 -C csrftoken=my_token -p ab_file.data -T application/x-www-form-urlencoded http://localhost:8000/
Run Code Online (Sandbox Code Playgroud)

ab_file.data看起来像这样:

url=my_encoded_url&csrfmiddlewaretoken=my_token
Run Code Online (Sandbox Code Playgroud)

它始终返回403状态代码.

当我使用curl相同的参数时,它的工作原理.卷曲线:

curl -X POST -d "url=my_encoded_url&csrfmiddlewaretoken=my_token" --cookie "csrftoken=my_token" http://localhost:8000/
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

jac*_*321 16

文件必须具有正确的url-encode数据.如果你手动进行url-encode,就很容易像空白一样错误编码.最好以编程方式进行.请参阅另一个答案: 关于如何使用Python创建此类文件的Apache Bench和POST数据(例如:post.data)

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

  • 您好,是否可以在命令中指定发布数据而不是像curl中那样指定文件? (6认同)

sha*_*ker 6

使用ab时,数据文件的全部内容必须包装在一行中 - 如果它通常是扩展的JSON,它将无声地失败.因此,对于curl工作正常的数据文件中的帖子将失败,直到您执行此操作.

提示:如果使用Atom编辑器,请选择all并按Cmd-J将所有内容包装到一行.


her*_*ara 5

@jacobm654321,

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

不管怎么说,还是要谢谢你。

  • 对于vim用户,`vi postFile`、`:set binary noeol`、`:wq`去除行尾('\n'); (6认同)