如果 WSRequest 有太多的 get() 参数会怎样?

What happens if WSRequest has too many get() parameters?

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

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

谢谢

我没有在文档中看到这个数字,但据我所知 - 标准中对查询字符串没有限制,所以它取决于实现。 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 个参数,它 returns“414 Request-URI Too Large”但仍然能够毫无错误地创建和发送 1000 个参数。

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

更新

我 运行 netcat 在本地回显 - nc -l 8888 然后用 100000 个参数向 url http://127.0.0.1:8888 发出请求,比如 &paramKey99999=paramValue99999 - 它的工作原理一个魅力。所以我可以回答:play 2.4.3 可以在总长度为 2 600 000 个字符的 WS 请求中发送至少 100000 个参数。你确定你想得到比这个更多的参数吗?