2015-10-15 62 views
1

我有一个相当离奇的问题,无法在任何地方找到答案。我在Play中构建WSRequest请求! 2.4.3并且我将使用setQueryParameter()将查询参数添加到请求中。之后,我使用request.get()将它们发送到另一个服务器并检索结果。如果WSRequest具有太多get()参数,会发生什么情况?

一切工作正常,但我很好奇,如果参数超过get()的限制会发生什么。我是否需要检查并提出两项个人要求?这是处理某处或它只是返回一个异常?

感谢

回答

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个PARAMS(和播放可以创建和发送它当然)。如果有1000个参数,它将返回“414 Request-URI太大”,但仍可以创建并发送1000个参数,而不会出错。

我很确定问题不在max参数中,而是在最大查询字符串长度中。

UPDATE

我运行netcat的局部回声 - nc -l 8888,然后做请求的URL http://127.0.0.1:8888 100000个parmeters,像&paramKey99999=paramValue99999 - 它就像一个魅力。所以我可以回答:play 2.4.3可以在WS请求中发送至少100000个参数,总长度为2 600 000个字符。你确定你认为有更多的参数吗?

+0

谢谢。不,我不会有超过10000个参数:) –

相关问题