繁体   English   中英

HttpUrlConnection 在 connect() 上获取响应正文

[英]HttpUrlConnection gets response body on connect()

考虑以下代码。

try {
    httpURLConnection = (HttpURLConnection) new URL(strings[0]).openConnection();

    httpURLConnection.setConnectTimeout(Config.HTTP_CONNECTION_TIMEOUT);
    httpURLConnection.setReadTimeout(Config.HTTP_CONNECTION_TIMEOUT);

    httpURLConnection.connect();

    responseCode = httpURLConnection.getResponseCode();
    httpURLConnection.getHeaderFields();
}
finally {
    httpURLConnection.disconnect();
}

问题是即使我不使用InputStream读取响应,在我的 Internet/Wifi 连接日志中我也可以看到响应正文。 我想要的只是检查标题中的一个字段,并根据该字段我将继续阅读InputStream

我的问题是这些:

  1. 即使在创建和读取BufferedInputStream之前,连接的流自动下载所有/部分文件是否正确?
  2. 如果是,那么是否可以停止文件下载,直到使用InputStream读取响应?
  3. 如果没有,那么我做错了什么或遗漏了什么?
  1. 响应包括标头和正文,服务器在发送正文之前不会停止让客户端确认标头。
    当客户端能够从头部读取响应代码时,主体的一部分已经被发送,其大小取决于网络延迟、缓冲......
    HttpURLConnection.getResponseCode()的当前实现甚至使用getInputStream()来确保连接处于正确状态。

  2. 客户端可以选择忽略正文,但通常不推荐这样做,因为它可能会阻止重用持久连接。
    我不确定 Android,但从 Java 6 开始,后台线程会自动用于读取剩余数据。

  3. 如果If-Modified-Since不是一个选项,为什么不使用HEAD请求

如果使用 HTTP GET 方法请求指定的资源,则 HTTP HEAD 方法请求返回的标头。 例如,可以在决定下载大量资源以节省带宽之前完成此类请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM