ApacheBenchmark:如何为POST请求正确提供JSON文件

时间:2019-12-16 23:11:33

标签: json http curl rsa apachebench

我正在尝试使用ab对Web服务器进行基准测试。我需要发布一个相当大的JSON负载,该负载也需要使用RSA进行数字签名。该签名经过了全面测试,并且通常可以正常工作。但是,使用ab时,签名不被接受(或被视为无效),而对于curl则可以正常工作。

卷曲

我可以使用curl使用静态签名(不使用时间戳的签名)进行验证。以下将产生有效的响应(状态:200):

curl -X POST https://example.com/post-endpoint -H 'X-KEY-ID: foobarID' -H 'X-SIGNATURE: base64-encoded-signature==' -H 'Content-Type: application/json' -d @payload.json

ab

基本上,我需要与以上ab命令等效的curl命令。但是,当我尝试以下操作时,服务器会回复一条Invalid Signature消息(状态:401):

ab -p payload.json -T application/json -H 'X-KEY-ID: foobarID' -H 'X-SIGNATURE: base64-encoded-signature==' https://example.com/post-endpoint

payload.json

payload.json的内容大致如下:

{"foo": "hello world", "bar": NaN, "int": "42", "float": "3.14", "nested_object": {"foo": "bar"}, "nested_list": [{"foo1": "bar1"}, {"foo2": "bar2"}]}

请注意,它以大括号开头/结尾,除NaN值外,所有字段(和大多数值)都用双引号引起来。同样,输入验证也有效:当我省略必填字段时,服务器会通知我;这告诉我JSON有效负载本身已被服务器接受。

期望

我的期望是ab显然是沿(POST)传递文件的字节。这对于接受签名至关重要,因为有效载荷字节已签名。如果只有一位无效,则签名无效。

问题

我想念什么?
在上述约束下如何使用ab
payload.json文件相反,有没有办法直接在终端中传递有效载荷?
ab是否以某种方式弄乱了有效载荷:在末尾添加换行符\n,对JSON进行排序等等?可以禁用此功能吗?

0 个答案:

没有答案