HttpUrlConnection 在 connect() 上获得响应 body
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 连接日志中我也可以看到 response-body。我想要的只是检查 header 中的一个字段,然后根据该字段我将继续阅读 InputStream
.
我的问题是:
- 连接流在创建和读取
BufferedInputStream
之前自动下载 all/partial 文件是否正确?
- 如果是,那么是否可以停止文件下载,直到使用
InputStream
读取响应?
- 如果不是,那么我做错了什么或遗漏了什么?
响应包括header和body,服务器不会停止让客户端在发送[=之前确认headers 35=].
在客户端能够从 header 读取响应代码时,body 的一部分已经发送,其大小取决于网络延迟、缓冲、... .
HttpURLConnection.getResponseCode()
的当前实现甚至使用getInputStream()
来确保连接处于正确状态。
客户端可以选择忽略body,但通常不推荐这样做,因为它可能会阻止持久连接被重用。
我不确定 Android 但自 Java 6 以来,后台线程自动用于读取剩余数据。
如果 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.
考虑以下代码。
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 连接日志中我也可以看到 response-body。我想要的只是检查 header 中的一个字段,然后根据该字段我将继续阅读 InputStream
.
我的问题是:
- 连接流在创建和读取
BufferedInputStream
之前自动下载 all/partial 文件是否正确? - 如果是,那么是否可以停止文件下载,直到使用
InputStream
读取响应? - 如果不是,那么我做错了什么或遗漏了什么?
响应包括header和body,服务器不会停止让客户端在发送[=之前确认headers 35=].
在客户端能够从 header 读取响应代码时,body 的一部分已经发送,其大小取决于网络延迟、缓冲、... .
HttpURLConnection.getResponseCode()
的当前实现甚至使用getInputStream()
来确保连接处于正确状态。客户端可以选择忽略body,但通常不推荐这样做,因为它可能会阻止持久连接被重用。
我不确定 Android 但自 Java 6 以来,后台线程自动用于读取剩余数据。如果
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.