代码之家  ›  专栏  ›  技术社区  ›  Abbas

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

  •  2
  • Abbas  · 技术社区  · 6 年前

    考虑以下代码。

    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连接日志中查看响应正文。我只想检查标题中的一个字段,然后根据该字段继续阅读 输入流 .

    我的问题如下:

    1. 即使在 BufferedInputStream 是否创建和读取?
    2. 如果是,那么是否可以停止文件下载,直到 输入流 用于读取响应?
    3. 如果没有,那么我是否做错了什么或遗漏了什么?
    1 回复  |  直到 6 年前
        1
  •  1
  •   bwt    6 年前
    1. 响应包括标头和正文,服务器不会停止,以便客户端在发送正文之前确认标头。
      当客户端能够从标头读取响应代码时,正文的一部分已经发送,其大小取决于网络延迟、缓冲等。。。。
      当前实施的 HttpURLConnection.getResponseCode() 均匀使用 getInputStream() 以确保连接处于正确状态。

    2. 客户端可以选择忽略主体,但通常不建议这样做,因为这可能会阻止重用持久连接。
      我不确定Android,但由于Java 6,后台线程会自动用于读取剩余数据。

    3. 如果 If-Modified-Since 不是选项,为什么不使用 HEAD request ? :

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