我有一個相當離奇的問題,無法在任何地方找到答案。我在Play中構建WSRequest請求! 2.4.3並且我將使用setQueryParameter()將查詢參數添加到請求中。之後,我使用request.get()將它們發送到另一個服務器並檢索結果。如果WSRequest具有太多get()參數,會發生什麼情況?
一切工作正常,但我很好奇,如果參數超過get()的限制會發生什麼。我是否需要檢查並提出兩項個人要求?這是處理某處或它只是返回一個異常?
感謝
我有一個相當離奇的問題,無法在任何地方找到答案。我在Play中構建WSRequest請求! 2.4.3並且我將使用setQueryParameter()將查詢參數添加到請求中。之後,我使用request.get()將它們發送到另一個服務器並檢索結果。如果WSRequest具有太多get()參數,會發生什麼情況?
一切工作正常,但我很好奇,如果參數超過get()的限制會發生什麼。我是否需要檢查並提出兩項個人要求?這是處理某處或它只是返回一個異常?
感謝
我沒有看到這個數字文檔中,但我知道 - 沒有限制查詢的標準字符串,所以它是從實現依賴。 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,像¶mKey99999=paramValue99999
- 它就像一個魅力。所以我可以回答:play 2.4.3可以在WS請求中發送至少100000個參數,總長度爲2 600 000個字符。你確定你認爲有更多的參數嗎?
謝謝。不,我不會有超過10000個參數:) –