[英]HttpURLConnection FileNotFoundException on large request properties
我正在使用HttpURLConnection將Android應用程序中的JSON數據發送到我的Tomcat服務器。
POST適用於小型JSON。 在較大的數據集上,它會因FileNotFoundException而失敗。
它能是什么?
這是代碼:
try {
URL url = new URL(urlIn);
strOut = "";
huc = (HttpURLConnection) url.openConnection();
huc.setRequestProperty("Connection", "Close");
huc.setRequestMethod("POST");
huc.setRequestProperty("User", userId);
huc.setRequestProperty("Action", action);
huc.setRequestProperty("JSON", jsonData);
huc.setConnectTimeout(10000);
in = new BufferedReader(new InputStreamReader(huc.getInputStream()));
while ((inputLine = in.readLine()) != null){
if (strOut.equalsIgnoreCase("")){
strOut = inputLine;
} else {
strOut = strOut + inputLine;
}
}
} catch (Exception e) {
strOut = "";
e.printStackTrace();
}
當jsonData達到一定大小(大約10000個字符)時,POST失敗並顯示錯誤。 JSON的內容沒有任何特殊字符。
提前致謝。
最好的問候,費德里科。
如果服務器響應404
響應代碼,則HTTPUrlConnection
會拋出FileNotFoundException
,因此發生這種情況的原因似乎位於服務器端而不是客戶端。 很可能服務器配置為接受特定長度的請求標頭,如果超過該大小,將返回錯誤。 一個簡短的谷歌搜索提出了幾個結果,提到了16 KB的大小,但更短的值也是合理的。
正如我在對您的問題的評論中提到的,您應該將您的流程更改為接收JSON數據(以及User
和Action
以及BTW的其他值)作為請求正文的一部分,例如作為url編碼的查詢字符串或作為multipart formdata。 您可以使用的HTTP客戶端庫支持這兩種方式,也可以手動輕松構建。
經過大量閱讀和嘗試后,我放棄了配置Tomcat以接受更大的標題。
所以我說服負責Tomcat應用程序的團隊制作一個能夠在體內接收這些數據的servlet,就像Lothar建議的那樣。
謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.