【问题标题】: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 发出请求,例如 &amp;paramKey99999=paramValue99999 - 它就像一个魅力。所以我可以回答:play 2.4.3 可以在总长度为 2 600 000 个字符的 WS 请求中发送至少 100000 个参数。你确定你想有更多的 get 参数吗?

    【讨论】:

    • 谢谢。不,我不会有超过 10000 个参数 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多