2015-10-15 18 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個參數:) –

相關問題