支持 HTTP 特定功能的 URLConnection。 有关详细信息,请参阅规范。
每个 HttpURLConnection 实例用于发出单个请求,但到 HTTP 服务器的底层网络连接可能会被其他实例透明地共享。 在请求之后对 HttpURLConnection 的 InputStream 或 OutputStream 调用 close() 方法可能会释放与此实例关联的网络资源,但不会影响任何共享的持久连接。 如果持续连接当时处于空闲状态,则调用 disconnect() 方法可能会关闭底层套接字。
HTTP 协议处理程序有一些可以通过系统属性访问的设置。 这包括代理设置以及各种其他设置。
如果安装了安全管理器,并且调用了导致尝试打开连接的方法,则调用者必须拥有:-
连接到目标 URL 的主机/端口组合的 SocketPermission 或
允许此请求的 URLPermission。
如果启用了自动重定向,并且此请求被重定向到另一个目的地,那么调用者还必须有权连接到重定向的主机/URL。
setFixedLengthStreamingMode(int contentLength)
当预先知道内容长度时,此方法用于启用没有内部缓冲的 HTTP 请求正文的流式传输。
setFixedLengthStreamingMode(long contentLength)
当预先知道内容长度时,此方法用于启用没有内部缓冲的 HTTP 请求正文的流式传输。
static void
setFollowRedirects(boolean set)
设置该类是否应自动跟随 HTTP 重定向(响应代码为 3xx 的请求)。
setInstanceFollowRedirects(boolean followRedirects)
设置此 HttpURLConnection 实例是否应自动跟随 HTTP 重定向(响应代码为 3xx 的请求)。
setRequestMethod(String method)
设置 URL 请求的方法,其中之一: GET POST HEAD OPTIONS PUT DELETE TRACE 是合法的,受协议限制。
abstract boolean
usingProxy()
指示连接是否通过代理。
addRequestProperty, connect, getAllowUserInteraction, getConnectTimeout, getContent, getContent, getContentEncoding, getContentLength, getContentLengthLong, getContentType, getDate, getDefaultAllowUserInteraction, getDefaultRequestProperty, getDefaultUseCaches, getDoInput, getDoOutput, getExpiration, getFileNameMap, getHeaderField, getHeaderFieldInt, getHeaderFieldLong, getHeaderFields, getIfModifiedSince, getInputStream, getLastModified, getOutputStream, getReadTimeout, getRequestProperties, getRequestProperty, getURL, getUseCaches, guessContentTypeFromName, guessContentTypeFromStream, setAllowUserInteraction, setConnectTimeout, setContentHandlerFactory, setDefaultAllowUserInteraction, setDefaultRequestProperty, setDefaultUseCaches, setDoInput, setDoOutput, setFileNameMap, setIfModifiedSince, setReadTimeout, setRequestProperty, setUseCaches, toString
如果为true,协议将自动遵循重定向。 如果为 false,协议将不会自动遵循重定向。
该字段由 setInstanceFollowRedirects 方法设置。 它的值由 getInstanceFollowRedirects 方法返回。
其默认值基于 HttpURLConnection 构建时静态 followRedirects 的值。
method
protected String method
HTTP 方法(GET、POST、PUT 等)。
responseCode
protected int responseCode
一个表示三位 HTTP 状态码的 int。
1xx:信息
2xx:成功
3xx:重定向
4xx:客户端错误
5xx:服务器错误
responseMessage
protected String responseMessage
HTTP 响应消息。
构造函数详细信息
HttpURLConnection
protected HttpURLConnection(URL u)
HttpURLConnection 的构造函数。
public String getHeaderFieldKey(int n)
返回第 n 个标头字段的键。 某些实现可能会将第 0 个标头字段视为特殊字段,即作为 HTTP 服务器返回的状态行。 在这种情况下,getHeaderField(0) 返回状态行,但 getHeaderFieldKey(0) 返回 null。
类 URLConnection 中的 getHeaderFieldKey
public void setFixedLengthStreamingMode(int contentLength)
当预先知道内容长度时,此方法用于启用没有内部缓冲的 HTTP 请求正文的流式传输。
如果应用程序尝试写入超过指定内容长度的数据,或者应用程序在写入指定数量之前关闭了 OutputStream,则会引发异常。
启用输出流时,无法自动处理身份验证和重定向。 如果需要身份验证或重定向,则在读取响应时将抛出 HttpRetryException。 可以查询此异常以获取错误的详细信息。
此方法必须在 URLConnection 连接之前调用。
注意:建议使用 setFixedLengthStreamingMode(long) 代替此方法,因为它允许设置更大的内容长度。
public void setFixedLengthStreamingMode(long contentLength)
当预先知道内容长度时,此方法用于启用没有内部缓冲的 HTTP 请求正文的流式传输。
如果应用程序尝试写入超过指定内容长度的数据,或者应用程序在写入指定数量之前关闭了 OutputStream,则会引发异常。
启用输出流时,无法自动处理身份验证和重定向。 如果需要身份验证或重定向,则在读取响应时将抛出 HttpRetryException。 可以查询此异常以获取错误的详细信息。
此方法必须在 URLConnection 连接之前调用。
通过调用此方法设置的内容长度优先于由 setFixedLengthStreamingMode(int) 设置的任何值。
public void setChunkedStreamingMode(int chunklen)
当事先不知道内容长度时,此方法用于启用没有内部缓冲的 HTTP 请求正文的流式传输。 在这种模式下,分块传输编码用于发送请求正文。 注意,并不是所有的 HTTP 服务器都支持这种模式。
启用输出流时,无法自动处理身份验证和重定向。 如果需要身份验证或重定向,则在读取响应时将抛出 HttpRetryException。 可以查询此异常以获取错误的详细信息。
此方法必须在 URLConnection 连接之前调用。
public String getHeaderField(int n)
返回第 n 个标头字段的值。 某些实现可能会将第 0 个标头字段视为特殊字段,即作为 HTTP 服务器返回的状态行。
此方法可以与 getHeaderFieldKey 方法结合使用,以遍历消息中的所有标头。
类 URLConnection 中的 getHeaderField
public static void setFollowRedirects(boolean set)
设置该类是否应自动跟随 HTTP 重定向(响应代码为 3xx 的请求)。 默认为真。 小程序无法更改此变量。
如果有安全管理器,该方法首先调用安全管理器的 checkSetFactory 方法,确保操作被允许。 这可能会导致 SecurityException。
public void setInstanceFollowRedirects(boolean followRedirects)
设置此 HttpURLConnection 实例是否应自动跟随 HTTP 重定向(响应代码为 3xx 的请求)。
默认值来自followRedirects,默认为true。
public boolean getInstanceFollowRedirects()
返回此 HttpURLConnection 的 instanceFollowRedirects 字段的值。
此 HttpURLConnection 的 instanceFollowRedirects 字段的值。
setRequestMethod
public void setRequestMethod(String method) throws ProtocolException
设置 URL 请求的方法,其中之一:
OPTIONS
DELETE
TRACE
是合法的,受协议限制。 默认方法是 GET。
HTTP/1.0 200 OK HTTP/1.0 401 Unauthorized
它将分别返回 200 和 401。 如果无法从响应中识别出任何代码(即响应不是有效的 HTTP),则返回 -1。
HTTP 状态码,或 -1
Throws:
Throw名称
Throw描述
public String getResponseMessage() throws IOException
获取与响应代码一起从服务器返回的 HTTP 响应消息(如果有)。 来自以下回复:
HTTP/1.0 200 OK HTTP/1.0 404 Not Found
分别提取字符串“OK”和“Not Found”。 如果无法从响应中辨别出任何内容(结果不是有效的 HTTP),则返回 null。
HTTP 响应消息,或 null
Throws:
Throw名称
Throw描述
返回解析为日期的命名字段的值。 结果是命名字段表示的自 1970 年 1 月 1 日 GMT 以来的毫秒数。
存在这种形式的 getHeaderField 是因为某些连接类型(例如 http-ng)具有预解析的标头。 该连接类型的类可以覆盖此方法并使解析短路。
类 URLConnection 中的 getHeaderFieldDate
public abstract void disconnect()
表示在不久的将来不太可能向服务器发出其他请求。 调用 disconnect() 不应暗示此 HttpURLConnection 实例可用于其他请求。
usingProxy
public abstract boolean usingProxy()
指示连接是否通过代理。
一个布尔值,指示连接是否使用代理。
getPermission
public Permission getPermission() throws IOException
返回一个 SocketPermission 对象,表示连接到目标主机和端口所需的权限。
类 URLConnection 中的 getPermission
一个 SocketPermission 对象,表示连接到目标主机和端口所需的权限。
Throws:
Throw名称
Throw描述
public InputStream getErrorStream()
如果连接失败但服务器仍然发送了有用的数据,则返回错误流。 典型的例子是当 HTTP 服务器响应 404 时,这将导致在连接中抛出 FileNotFoundException,但服务器发送了一个 HTML 帮助页面,其中包含有关如何操作的建议。
此方法不会导致启动连接。 如果连接未连接,或者服务器在连接时没有错误,或者服务器有错误但没有发送错误数据,则此方法将返回 null。 这是默认设置。
如果有错误流,如果没有错误,则返回 null,连接未连接或服务器未发送有用数据。