1

我正在使用 HttpURLConnection 发出 POST 请求。我在测试期间始终观察到相同的行为:

  1. 第一个请求运行得非常快(毫秒)
  2. 所有以下请求都需要一秒 + 几毫秒

所以有些东西导致了 1 秒的延迟。会是什么?延迟恰好发生在 HttpURLConnection#getInputStream() 中。我用 HttpClient 替换了实现——然后一切正常,没有第二次延迟(所以这不是服务器故障)。但我真的不想使用任何外部依赖项,所以我想修复 HttpURLConnection 的东西......有什么想法吗?

低于当前的实现。我尝试了 stackoverflow 中的一些技巧(向请求中添加标头),但没有成功。

        URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    con.setRequestMethod("POST");

    con.setRequestProperty("Content-Length", ""
        + (body == null ? 0 : body.length));

    // Send post request
    con.setDoOutput(true);
    OutputStream wr = con.getOutputStream();
    if (body != null) {
    wr.write(body);
    }
    wr.flush();
    wr.close();

    BufferedReader rd = new BufferedReader(new InputStreamReader(
        con.getInputStream()));
    String line;
    String result = "";
    while ((line = rd.readLine()) != null) {
    result += line;
    }

    rd.close();
    con.disconnect();

    return result;

PS:这是关于jse,而不是android。

4

1 回答 1

1

您永远不会从连接中关闭输入流 - 这可能意味着该连接不符合池化条件,并且在下一次尝试时,它会等待最多一秒钟,以查看前一个请求的连接是否符合池化条件。

至少,关闭流是个好主意。如果您使用的是 Java 7,请使用 try-with-resources 块——作者也是如此。

顺便说一句,我建议您在阅读时明确说明您期望的编码 - 或使用更高级别的库,该库会根据标题自动检测到。

于 2013-11-08T13:45:08.417 回答