如何使用apache bench提交带有json输入的GET请求?

时间:2013-06-21 19:04:22

标签: http apachebench

我们的服务请求如下所示:

GET http://[SERVICE]/Node:[id].Build?format=mime1,mime2,...,mimeN&template-id=[templateid]
Accept: multipart/mixed
Content-Type: application/json
body: json document

我正在尝试使用ApacheBench来测试基准测试。这是我正在使用的电话:

ab -n 10 -c 2 -T 'application/json' -H 'Accept: multipart/mixed' 'http://phx5qa01c-02b0.stratus.phx.qa.ebay.com/.Build?format=text/html,text/plain&template-id=29b1468f-c8c3-db23-2f6f-74e112795540'

此调用通过,并导致错误,因为预期的json数据不存在。在ab中有一种方法可以提供必要的json以及此请求。我看到有-p和-u命令来指定输入文件,但这些命令用于put和posts。

1 个答案:

答案 0 :(得分:0)

我意识到这个答案已经晚了六年,但是我认为值得一提,因为我在一个与此非常类似的问题上用力撞墙,在该问题中,我试图加载测试一个仅返回的URL JSON数据,而我的解决方案可能会帮助其他读者遇到此问题。我的问题是我不需要时一直指定-H选项。这样一直使服务器向我的AB请求发送回HTTP 406响应代码(不可接受)。在我的大部分故障排除过程中,我也将-T 'application/json'保留在不需要的AB请求中。仅与PUT或POST结合使用(使用-p开关时)。所以我删除了-H和-T,并且它起作用了。说了这么多,我在这里看到了这两个问题。我们需要注意,AB默认使用GET方法。

  1. 您通过将额外的自定义标头附加到 通过使用-H选项-H 'Accept: multipart/mixed'来请求 可能会使您的目标服务器认为这是无效请求,并停止 顺序就在那儿。除非您有-H,否则请不要使用-H 真的很好的理由。

  2. 您正在使用-T选项:-T 'application/json',其中 仅在与-p一起指定且您 在命令的任何地方都没有-p,因为您要发送的是GET而不是PUT或POST,所以您也不想使用它。

因此,要解决此问题,只需删除-T和-H选项,它就可以工作。 其他读者的提醒:如果在Windows上,则在此URL包含特殊字符(例如“&”或“?”)时,请用双引号引起来,在这种情况下。

ab -n 10 -c 2 'http://phx5qa01c-02b0.stratus.phx.qa.ebay.com/.Build?format=text/html,text/plain&template-id=29b1468f-c8c3-db23-2f6f-74e112795540'