【问题标题】:How to submit a GET request with json input using apache bench?如何使用 apache bench 提交带有 json 输入的 GET 请求?
【发布时间】:2013-06-19 00:24:24
【问题描述】:

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

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 命令来指定输入文件,但它们是用于放置和发布的。

【问题讨论】:

  • 我质疑你为什么首先使用GET 方法来发送数据。尽管这样做is not technically prohibited,但您的用例不太可能不违反 RFC 2616 对安全性和幂等性的要求。您是否使用 JSON 文档作为查询字符串替换来从资源中进行复杂查询?请分享您这样做的动机。
  • 我们这样做的原因是因为我们需要传入很多变量,以便准确指定要获取的内容。我们考虑将这些作为查询参数,但使用 json 更有意义。我们不发送数据本身,只发送描述我们需要的标准/变量。有没有办法使用 ab 做到这一点?
  • 啊,我明白了。这是有道理的,尽管我仍然建议简化 API 以通过 URI 查询字符串提供特定的、可寻址的参数。例如,不是从一个单一资源中提供一个庞大的查询引擎,而是将其分解为子资源以查询某些类型的资源。我相当肯定ab 无法做到这一点,并且有一个很好的理由:HTTP 运行良好,因为它是标准化的。通过 GET 主体创建自己的查询方案会使事情变得不必要地复杂化,通常不鼓励这样做。
  • 有道理,感谢您的意见。

标签: http apachebench


【解决方案1】:

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

  1. 您通过将额外的自定义标头附加到 请求,通过使用 -H 选项:-H 'Accept: multipart/mixed',它 可能会使您的目标服务器认为这是一个无效请求并停止 立即排序。除非你有一个,否则不要使用 -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'

【讨论】:

    猜你喜欢
    • 2016-10-14
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    相关资源
    最近更新 更多