如果WSRequest有太多的get()参数会发生什么?

时间:2015-10-15 07:54:08

标签: playframework playframework-2.4

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

一切正常,但我很好奇,如果参数超过get()的限制会发生什么。我需要检查这个并提出两个单独的请求吗?这是在某处处理还是仅返回异常?

由于

1 个答案:

答案 0 :(得分: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()));
    }

}

所以,&#34; http://httpbin.org/get&#34;容易拿100个参数(当然Play可以创建并发送它)。并且有1000个参数,它返回&#34; 414 Request-URI Too Large&#34;但是仍然能够无误地创建和发送1000个参数。

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

<强>更新

我在本地运行netcat echo - nc -l 8888然后向网址http://127.0.0.1:8888请求了100000个参数,例如&paramKey99999=paramValue99999 - 它就像一个魅力。所以我可以回答:播放2.4.3可以在WS请求中发送至少100000个参数,总长度为2 600 000个字符。你确定你想要有更多的参数吗?