gpt4 book ai didi

java - HttpUrlConnection 在 connect() 上获取响应主体

转载 作者:行者123 更新时间:2023-11-30 10:19:19 27 4
gpt4 key购买 nike

考虑以下代码。

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 连接日志中我也可以看到响应主体。我想要的只是检查 header 中的一个字段,并根据该字段继续读取 InputStream

我的问题是:

  1. 即使在创建和读取 BufferedInputStream 之前,连接流自动下载全部/部分文件的行为是否正确?
  2. 如果是,那么是否可以停止文件下载,直到使用 InputStream 读取响应?
  3. 如果不是,那么我做错了什么或遗漏了什么?

最佳答案

  1. 响应包括 header 和正文,服务器在发送正文之前不会停止让客户端确认 header 。
    当客户端能够从 header 中读取响应代码时,正文的一部分已经发送,其大小取决于网络延迟、缓冲......
    HttpURLConnection.getResponseCode() 的当前实现甚至使用 getInputStream() 来确保连接处于正确状态。

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

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

The HTTP HEAD method requests the headers that are returned if the specified resource would be requested with an HTTP GET method. Such a request can be done before deciding to download a large resource to save bandwidth, for example.

关于java - HttpUrlConnection 在 connect() 上获取响应主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48680542/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com