大型请求属性上的HttpURLConnection FileNotFoundException

时间:2017-10-10 19:42:35

标签: java android httpurlconnection filenotfoundexception

我正在使用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达到一定大小(arround 10000 chars)时,POST失败并显示错误。 JSON的内容没有任何特殊字符。

提前致谢。

最好的问候,费德里科。

2 个答案:

答案 0 :(得分:1)

如果服务器以HTTPUrlConnection响应代码响应,则

FileNotFoundException会抛出404,因此发生这种情况的原因似乎位于服务器端而不是客户端。很可能服务器配置为接受特定长度的请求标头,如果超过该大小,将返回错误。一个简短的谷歌搜索提出了几个结果,提到了16 KB的大小,但更短的值也是合理的。

正如我在对您的问题的评论中提到的,您应该更改您的流程以接收JSON数据(以及UserAction的其他值以及BTW)作为请求的一部分身体,例如作为url编码的查询字符串或multipart formdata。您可以使用的HTTP客户端库支持这两种方式,也可以手动轻松构建。

答案 1 :(得分:0)

经过大量阅读和尝试后,我放弃了配置Tomcat以接受更大的标题。

所以我说服负责Tomcat应用程序的团队制作一个能够在正文中接收这些数据的servlet,正如Lothar建议的那样。

谢谢!