HttpURLConnection getInputStream()有一秒延迟
我正在使用HttpURLConnection来发出POST请求。 我在测试期间始终观察到相同的行为:
- 第一个请求运行速度非常快(毫秒)
- 以下所有请求需要一秒钟+几毫秒
所以有些事情导致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。
您永远不会从连接中关闭输入流 – 这可能意味着连接不符合池的条件,并且在下一次尝试时,它等待最多一秒钟以查看先前请求的连接是否有资格进行池化。
至少,关闭流是个好主意。 如果您正在使用Java 7,请使用try-with-resources块 – 并为编写器同上。
另外,我建议您在阅读时明确说明您期望的编码 – 或者使用更高级别的库,该库会根据标头自动检测到。
- 什么可能导致套接字ConnectException:连接超时?
- Google App Engine(Java):URL获取响应过大的问题
- Android – 来自Map 的HttpURLConnection参数通过POST方法
- 使用HttpURLConnection使用JSON数据发出PUT请求不起作用
- getRequestProperty(“Authorization”)始终返回null
- 如何在Java中向REST API发送Request有效负载?
- 如何在HttpURLConnection中覆盖http-header“Host”?
- 将HTTP 407错误作为IOException
- 如何从HttpClient切换到HttpUrlConnection?