HttpURLConnection FileNotFoundException on large request pro



我正在使用HttpURLConnection将JSON数据从Android应用程序发送到我的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 编码的查询字符串或多部分表单数据。这两种方式都受 HTTP 客户端库的支持,您可以使用或轻松手动构建。

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

因此,我说服了负责Tomcat应用程序的团队制作了一个能够在体内接收这些数据的servlet,就像Lothar建议的那样。

谢谢!

最新更新