【问题标题】:What happens if WSRequest has too many get() parameters?如果 WSRequest 有太多的 get() 参数会怎样?
【发布时间】:2015-10-15 07:54:07
【问题描述】:
我有一个相当奇怪的问题,在任何地方都找不到答案。我正在 Play 中构建一个 WSRequest 请求! 2.4.3 我正在使用 setQueryParameter() 将查询参数添加到请求中。之后,我使用 request.get() 将它们发送到另一台服务器并检索结果。
一切正常,但我很好奇,如果参数超过 get() 的限制会发生什么。我需要检查这个并提出两个单独的请求吗?这是在某处处理的还是只是返回异常?
谢谢
【问题讨论】:
标签:
playframework
playframework-2.4
【解决方案1】:
我没有在文档中看到这个数字,但据我所知 - 标准中的查询字符串没有限制,所以它取决于实现。 What is the maximum possible length of a query string?。我很确定即使在您的服务器之前,另一台服务器也可以解决长查询字符串的问题。
我唯一建议的解决方案是通过一些简单的代码来检查它:
package controllers;
import javax.inject.Inject;
import play.*;
import play.mvc.*;
import play.libs.ws.*;
import play.libs.F.Promise;
public class Application extends Controller {
@Inject WSClient ws;
public Promise<Result> index() {
WSRequest request = ws.url("http://httpbin.org/get");
int paramsNumber = 100;
for(int i=0; i<paramsNumber; i++){
request.setQueryParameter("paramKey" + i, "paramValue" + i);
}
return request.get().map(response -> ok(response.getBody()));
}
}
所以,“http://httpbin.org/get”很容易接受 100 个参数(当然,Play 可以创建和发送它)。使用 1000 个参数,它会返回“414 Request-URI Too Large”,但仍然可以创建和发送 1000 个参数而不会出错。
我很确定问题不在于最大参数数,而在于最大查询字符串长度。
更新
我在本地运行 netcat echo - nc -l 8888,然后使用 100000 个参数向 URL http://127.0.0.1:8888 发出请求,例如 &paramKey99999=paramValue99999 - 它就像一个魅力。所以我可以回答:play 2.4.3 可以在总长度为 2 600 000 个字符的 WS 请求中发送至少 100000 个参数。你确定你想有更多的 get 参数吗?