我有一个相当离奇的问题,无法在任何地方找到答案。我在Play中构建WSRequest请求! 2.4.3并且我将使用setQueryParameter()将查询参数添加到请求中。之后,我使用request.get()将它们发送到另一个服务器并检索结果。如果WSRequest具有太多get()参数,会发生什么情况?
一切工作正常,但我很好奇,如果参数超过get()的限制会发生什么。我是否需要检查并提出两项个人要求?这是处理某处或它只是返回一个异常?
感谢
我有一个相当离奇的问题,无法在任何地方找到答案。我在Play中构建WSRequest请求! 2.4.3并且我将使用setQueryParameter()将查询参数添加到请求中。之后,我使用request.get()将它们发送到另一个服务器并检索结果。如果WSRequest具有太多get()参数,会发生什么情况?
一切工作正常,但我很好奇,如果参数超过get()的限制会发生什么。我是否需要检查并提出两项个人要求?这是处理某处或它只是返回一个异常?
感谢
我没有看到这个数字文档中,但我知道 - 没有限制查询的标准字符串,所以它是从实现依赖。 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个PARAMS(和播放可以创建和发送它当然)。如果有1000个参数,它将返回“414 Request-URI太大”,但仍可以创建并发送1000个参数,而不会出错。
我很确定问题不在max参数中,而是在最大查询字符串长度中。
UPDATE
我运行netcat的局部回声 - nc -l 8888
,然后做请求的URL http://127.0.0.1:8888
100000个parmeters,像¶mKey99999=paramValue99999
- 它就像一个魅力。所以我可以回答:play 2.4.3可以在WS请求中发送至少100000个参数,总长度为2 600 000个字符。你确定你认为有更多的参数吗?
谢谢。不,我不会有超过10000个参数:) –