内容最大长度?(Maximum length of content?)

2019-07-21 17:24发布

我试图用一个服务器连接HttpURLConnection ,但我有PUT方法有问题。
我需要发送一个字符串1500点的字符 (或更多),但在这种情况下,服务器产生一个超时并返回500 -服务器内部错误
如果我发送一个字符串低于1400个字 ,我没有问题,服务器返回OK。

我的代码如下:

public String connectToServer(String prototype) {
    String responseString = "";

    try {
        BufferedReader in = new BufferedReader(new InputStreamReader(openURLForInput(new URL(URL), USERNAME, PASSWORD, prototype)));
        String line;
        while ((line = in.readLine()) != null) {
            System.out.println(line);
            responseString += line;
        }

    } catch (IOException e) {
        e.printStackTrace();
        responseString = e.toString();
    }

    return responseString;
}

// -----------------------

public InputStream openURLForInput(URL url, String uname, String pword, String content) throws IOException {
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setDoInput(true);
    conn.setDoOutput(true);
    conn.setRequestProperty("Authorization", userNamePasswordBase64(uname, pword)); // I know this is OK
    conn.addRequestProperty("Content-type", "application/xml; charset=utf-8");

    //conn.setChunkedStreamingMode(8 * 1024);

    conn.setRequestMethod("PUT");
    conn.connect();

    OutputStream output = conn.getOutputStream();
    OutputStreamWriter osw = new OutputStreamWriter(output, "UTF-8");
    BufferedWriter writer = new BufferedWriter(osw);
    writer.write(content); // content length  > 1400 characters
    writer.close();
    output.close();

    int status = conn.getResponseCode();
    Log.i("STATUS", status + "");
    Log.i("STATUS_ERROR", conn.getResponseMessage());

    return conn.getInputStream();
}

我tryed添加行

conn.setFixedLengthStreamingMode(contentLength)
conn.setChunkedStreamingMode(8 * 1024);

但服务器的答案是错的呢。

更新:

我能发现问题。 出于某种原因,当我试图在请求中发送大量人体的,该服务器产生超时,但并不适用于所有网络 ,只能用一些网络。 我使用一个安全的连接如SSL,这也许能带来的问题?

Answer 1:

也许这是一个网络的MTU问题,我说你在这一方面进行调查。

下面是窗口相关的表:

Network             MTU (bytes)
-------------------------------
16 Mbps Token Ring        17914
4 Mbps Token Ring          4464
FDDI                       4352
Ethernet                   1500
IEEE 802.3/802.2           1492
PPPoE (WAN Miniport)       1480
X.25                        576


Answer 2:

我推荐你使用非常有帮助的http请求由Kevin Sawicki库...

它帮了我很多次了!



Answer 3:

服务器响应500 - 服务器内部错误。 所以,你应该检查服务器实现。 它应该有一个内容长度以上的限制。
我有一个应用程序,做了很多服务器的HTTP请求和对我的问题还真是服务器。 主要的证据是,你的代码与内容低于或等于则字符1415。



文章来源: Maximum length of content?