簡體   English   中英

大型請求屬性上的HttpURLConnection FileNotFoundException

[英]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數據(以及UserAction以及BTW的其他值)作為請求正文的一部分,例如作為url編碼的查詢字符串或作為multipart formdata。 您可以使用的HTTP客戶端庫支持這兩種方式,也可以手動輕松構建。

經過大量閱讀和嘗試后,我放棄了配置Tomcat以接受更大的標題。

所以我說服負責Tomcat應用程序的團隊制作一個能夠在體內接收這些數據的servlet,就像Lothar建議的那樣。

謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM