- 直接已知的子类:
-
HttpsURLConnection
每个HttpURLConnection实例用于发出单个请求,但到HTTP服务器的底层网络连接可能会被其他实例透明共享。在请求之后调用HttpURLConnection的InputStream或OutputStream的close()方法可能会释放与此实例关联的网络资源,但不会对任何共享的持久连接产生影响。调用disconnect()方法可能会在持久连接在那时空闲时关闭底层套接字。
HTTP协议处理程序有一些可以通过系统属性访问的设置。这包括代理设置以及各种其他设置。
安全权限
如果安装了安全管理器,并且调用了导致尝试打开连接的方法,则调用者必须拥有以下权限之一:
- 目标URL的主机/端口组合的"connect"
SocketPermission
或 - 允许此请求的
URLPermission
。
如果启用了自动重定向,并且此请求被重定向到另一个目标,则调用者还必须具有连接到重定向主机/URL的权限。
- 自版本:
- 1.1
- 另请参阅:
-
Field Summary
Modifier and TypeFieldDescriptionprotected int
在使用分块编码流模式进行输出时的块长度。protected int
在使用固定长度流模式时的固定内容长度。protected long
在使用固定长度流模式时的固定内容长度。static final int
HTTP状态码202: 已接受。static final int
HTTP状态码502: 错误的网关。static final int
HTTP状态码405: 方法不允许。static final int
HTTP状态码400: 错误的请求。static final int
HTTP状态码408: 请求超时。static final int
HTTP状态码409: 冲突。static final int
HTTP状态码201: 已创建。static final int
HTTP状态码413: 请求实体过大。static final int
HTTP状态码403: 禁止访问。static final int
HTTP状态码504: 网关超时。static final int
HTTP状态码410: 已删除。static final int
HTTP状态码500: 服务器内部错误。static final int
HTTP状态码411: 需要长度。static final int
HTTP状态码301: 永久移动。static final int
HTTP状态码302: 临时重定向。static final int
HTTP状态码300: 多种选择。static final int
HTTP状态码204: 无内容。static final int
HTTP状态码406: 不可接受。static final int
HTTP状态码203: 非权威信息。static final int
HTTP状态码404: 未找到。static final int
HTTP状态码501: 未实现。static final int
HTTP状态码304: 未修改。static final int
HTTP状态码200: 正常。static final int
HTTP状态码206: 部分内容。static final int
HTTP状态码402: 需要付款。static final int
HTTP状态码412: 前提条件失败。static final int
HTTP状态码407: 需要代理身份验证。static final int
HTTP状态码414: 请求URI过长。static final int
HTTP状态码205: 重置内容。static final int
HTTP状态码303: 查看其他。static final int
已弃用。它被放错了位置,不应该存在。static final int
HTTP状态码401: 未经授权。static final int
HTTP状态码503: 服务不可用。static final int
HTTP状态码415: 不支持的媒体类型。static final int
HTTP状态码305: 使用代理。static final int
HTTP状态码505: 不支持的HTTP版本。protected boolean
如果true
,协议将自动遵循重定向。protected String
HTTP方法(GET、POST、PUT等)。protected int
代表三位数HTTP状态码的int
。protected String
HTTP响应消息。Fields declared in class java.net.URLConnection
allowUserInteraction, connected, doInput, doOutput, ifModifiedSince, url, useCaches
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionabstract void
表示在不久的将来不太可能向服务器发出其他请求。如果连接失败但服务器仍发送有用数据,则返回错误流。static boolean
返回一个boolean
,指示是否应自动遵循HTTP重定向(3xx)。getHeaderField
(int n) 返回第n
个头字段的值。getHeaderFieldKey
(int n) 返回第n
个头字段的键。boolean
返回此HttpURLConnection
的instanceFollowRedirects
字段的值。返回表示连接到目标主机和端口所需权限的SocketPermission
对象。获取请求方法。int
从HTTP响应消息中获取状态码。获取服务器返回的HTTP响应消息(如果有)以及响应代码。void
提供一个在通过HTTP协议请求身份验证时要使用的Authenticator
给此HttpURLConnection
使用。void
setChunkedStreamingMode
(int chunklen) 当内容长度事先未知时,此方法用于启用HTTP请求体的流式传输而无需内部缓冲。void
setFixedLengthStreamingMode
(int contentLength) 当内容长度事先已知时,此方法用于启用HTTP请求体的流式传输而无需内部缓冲。void
setFixedLengthStreamingMode
(long contentLength) 当内容长度事先已知时,此方法用于启用HTTP请求体的流式传输而无需内部缓冲。static void
setFollowRedirects
(boolean set) 设置此类是否应自动遵循HTTP重定向(响应代码为3xx)。void
setInstanceFollowRedirects
(boolean followRedirects) 设置此HttpURLConnection
实例是否应自动遵循HTTP重定向(响应代码为3xx)。void
setRequestMethod
(String method) 设置URL请求的方法,其中之一:GET POST HEAD OPTIONS PUT DELETE TRACE 是合法的,但受协议限制。abstract boolean
指示连接是否通过代理。Methods declared in class java.net.URLConnection
addRequestProperty, connect, getAllowUserInteraction, getConnectTimeout, getContent, getContent, getContentEncoding, getContentLength, getContentLengthLong, getContentType, getDate, getDefaultAllowUserInteraction, getDefaultRequestProperty, getDefaultUseCaches, getDefaultUseCaches, getDoInput, getDoOutput, getExpiration, getFileNameMap, getHeaderField, getHeaderFieldDate, getHeaderFieldInt, getHeaderFieldLong, getHeaderFields, getIfModifiedSince, getInputStream, getLastModified, getOutputStream, getReadTimeout, getRequestProperties, getRequestProperty, getURL, getUseCaches, guessContentTypeFromName, guessContentTypeFromStream, setAllowUserInteraction, setConnectTimeout, setContentHandlerFactory, setDefaultAllowUserInteraction, setDefaultRequestProperty, setDefaultUseCaches, setDefaultUseCaches, setDoInput, setDoOutput, setFileNameMap, setIfModifiedSince, setReadTimeout, setRequestProperty, setUseCaches, toString
-
Field Details
-
method
HTTP方法(GET、POST、PUT等)。 -
chunkLength
protected int chunkLength在使用分块编码流模式进行输出时的块长度。值为-1
表示已禁用输出的分块编码。- 自版本:
- 1.5
-
fixedContentLength
protected int fixedContentLength在使用固定长度流模式时的固定内容长度。值为-1
表示已禁用输出的固定长度流模式。注意: 建议使用
fixedContentLengthLong
代替此字段,因为它允许设置更大的内容长度。- 自版本:
- 1.5
-
fixedContentLengthLong
protected long fixedContentLengthLong在使用固定长度流模式时的固定内容长度。值为-1
表示已禁用输出的固定长度流模式。- 自版本:
- 1.7
-
responseCode
protected int responseCode代表三位数HTTP状态码的int
。- 1xx: 信息
- 2xx: 成功
- 3xx: 重定向
- 4xx: 客户端错误
- 5xx: 服务器错误
-
responseMessage
HTTP响应消息。 -
instanceFollowRedirects
protected boolean instanceFollowRedirects如果true
,协议将自动遵循重定向。如果false
,协议将不会自动遵循重定向。此字段由
setInstanceFollowRedirects
方法设置。其值由getInstanceFollowRedirects
方法返回。其默认值基于HttpURLConnection构造时的静态followRedirects的值。
- 另请参阅:
-
HTTP_OK
public static final int HTTP_OKHTTP状态码200: 正常。- 另请参阅:
-
HTTP_CREATED
public static final int HTTP_CREATEDHTTP状态码201: 已创建。- 另请参阅:
-
HTTP_ACCEPTED
public static final int HTTP_ACCEPTEDHTTP状态码202: 已接受。- 另请参阅:
-
HTTP_NOT_AUTHORITATIVE
public static final int HTTP_NOT_AUTHORITATIVEHTTP状态码203: 非权威信息。- 另请参阅:
-
HTTP_NO_CONTENT
public static final int HTTP_NO_CONTENTHTTP状态码204: 无内容。- 另请参阅:
-
HTTP_RESET
public static final int HTTP_RESETHTTP状态码205: 重置内容。- 另请参阅:
-
HTTP_PARTIAL
public static final int HTTP_PARTIALHTTP状态码206: 部分内容。- 另请参阅:
-
HTTP_MULT_CHOICE
public static final int HTTP_MULT_CHOICEHTTP状态码300:多种选择。- 参见:
-
HTTP_MOVED_PERM
public static final int HTTP_MOVED_PERMHTTP状态码301:永久移动。- 参见:
-
HTTP_MOVED_TEMP
public static final int HTTP_MOVED_TEMPHTTP状态码302:临时重定向。- 参见:
-
HTTP_SEE_OTHER
public static final int HTTP_SEE_OTHERHTTP状态码303:查看其他位置。- 参见:
-
HTTP_NOT_MODIFIED
public static final int HTTP_NOT_MODIFIEDHTTP状态码304:未修改。- 参见:
-
HTTP_USE_PROXY
public static final int HTTP_USE_PROXYHTTP状态码305:使用代理。- 参见:
-
HTTP_BAD_REQUEST
public static final int HTTP_BAD_REQUESTHTTP状态码400:错误的请求。- 参见:
-
HTTP_UNAUTHORIZED
public static final int HTTP_UNAUTHORIZEDHTTP状态码401:未经授权。- 参见:
-
HTTP_PAYMENT_REQUIRED
public static final int HTTP_PAYMENT_REQUIREDHTTP状态码402:需要付款。- 参见:
-
HTTP_FORBIDDEN
public static final int HTTP_FORBIDDENHTTP状态码403:禁止访问。- 参见:
-
HTTP_NOT_FOUND
public static final int HTTP_NOT_FOUNDHTTP状态码404:未找到。- 参见:
-
HTTP_BAD_METHOD
public static final int HTTP_BAD_METHODHTTP状态码405:方法不允许。- 参见:
-
HTTP_NOT_ACCEPTABLE
public static final int HTTP_NOT_ACCEPTABLEHTTP状态码406:不可接受。- 参见:
-
HTTP_PROXY_AUTH
public static final int HTTP_PROXY_AUTHHTTP状态码407:需要代理身份验证。- 参见:
-
HTTP_CLIENT_TIMEOUT
public static final int HTTP_CLIENT_TIMEOUTHTTP状态码408:请求超时。- 参见:
-
HTTP_CONFLICT
public static final int HTTP_CONFLICTHTTP状态码409:冲突。- 参见:
-
HTTP_GONE
public static final int HTTP_GONEHTTP状态码410:已删除。- 参见:
-
HTTP_LENGTH_REQUIRED
public static final int HTTP_LENGTH_REQUIREDHTTP状态码411:需要长度。- 参见:
-
HTTP_PRECON_FAILED
public static final int HTTP_PRECON_FAILEDHTTP状态码412:前提条件失败。- 参见:
-
HTTP_ENTITY_TOO_LARGE
public static final int HTTP_ENTITY_TOO_LARGEHTTP状态码413:请求实体过大。- 参见:
-
HTTP_REQ_TOO_LONG
public static final int HTTP_REQ_TOO_LONGHTTP状态码414:请求URI过长。- 参见:
-
HTTP_UNSUPPORTED_TYPE
public static final int HTTP_UNSUPPORTED_TYPEHTTP状态码415:不支持的媒体类型。- 参见:
-
HTTP_SERVER_ERROR
Deprecated.it is misplaced and shouldn't have existed.HTTP状态码500:内部服务器错误。- 参见:
-
HTTP_INTERNAL_ERROR
public static final int HTTP_INTERNAL_ERRORHTTP状态码500:内部服务器错误。- 参见:
-
HTTP_NOT_IMPLEMENTED
public static final int HTTP_NOT_IMPLEMENTEDHTTP状态码501:未实现。- 参见:
-
HTTP_BAD_GATEWAY
public static final int HTTP_BAD_GATEWAYHTTP状态码502:错误的网关。- 参见:
-
HTTP_UNAVAILABLE
public static final int HTTP_UNAVAILABLEHTTP状态码503:服务不可用。- 参见:
-
HTTP_GATEWAY_TIMEOUT
public static final int HTTP_GATEWAY_TIMEOUTHTTP状态码504:网关超时。- 参见:
-
HTTP_VERSION
public static final int HTTP_VERSIONHTTP状态码505:不支持的HTTP版本。- 参见:
-
-
Constructor Details
-
HttpURLConnection
HttpURLConnection的构造函数。- 参数:
-
u
- URL
-
-
Method Details
-
setAuthenticator
- 实现要求:
-
此方法的默认行为是无条件地抛出
UnsupportedOperationException
。支持为特定HttpURLConnection
实例提供Authenticator
的具体实现应覆盖此方法以实现不同的行为。 - 实现说明:
-
根据认证方案,实现可能需要或不需要使用提供的认证器来获取密码。例如,依赖第三方安全库的实现仍可能调用默认认证器,如果这些库配置为这样做。同样,支持透明NTLM认证的实现可能会让系统首先尝试使用系统用户凭据进行连接,然后再调用提供的认证器。
但是,如果专门提供了认证器,则底层连接可能仅用于共享相同Authenticator
实例的HttpURLConnection
实例,并且如果已缓存认证信息,则仅可用于共享该相同Authenticator
的HttpURLConnection
。 - 参数:
-
auth
- 应该由此HttpURLConnection
使用的Authenticator
。 - 抛出:
-
UnsupportedOperationException
- 如果底层实现不支持设置认证器。 -
IllegalStateException
- 如果URLConnection已连接。 -
NullPointerException
- 如果提供的auth
为null
。 - 自:
- 9
-
getHeaderFieldKey
返回第n
个头字段的键。一些实现可能将第0
个头字段视为特殊字段,即作为HTTP服务器返回的状态行。在这种情况下,getHeaderField(0)
返回状态行,但getHeaderFieldKey(0)
返回null。- 覆盖:
-
getHeaderFieldKey
在类URLConnection
- 参数:
-
n
- 一个索引,其中n >=0
。 - 返回:
-
第
n
th 头字段的键,如果键不存在则返回null
。
-
setFixedLengthStreamingMode
public void setFixedLengthStreamingMode(int contentLength) 此方法用于在内容长度事先已知的情况下启用 HTTP 请求体的流式传输,而无需内部缓冲。如果应用程序尝试写入的数据超过指示的内容长度,或者在写入指示的数量之前关闭 OutputStream,将抛出异常。
启用输出流时,无法自动处理身份验证和重定向。如果需要身份验证或重定向,则在读取响应时将抛出 HttpRetryException。可以查询此异常以获取错误的详细信息。
此方法必须在连接 URLConnection 之前调用。
注意:建议使用
setFixedLengthStreamingMode(long)
代替此方法,因为它允许设置更大的内容长度。- 参数:
-
contentLength
- 将写入 OutputStream 的字节数。 - 抛出:
-
IllegalStateException
- 如果 URLConnection 已连接或已启用不同的流模式。 -
IllegalArgumentException
- 如果指定的内容长度小于零。 - 自:
- 1.5
- 参见:
-
setFixedLengthStreamingMode
public void setFixedLengthStreamingMode(long contentLength) 此方法用于在内容长度事先已知的情况下启用 HTTP 请求体的流式传输,而无需内部缓冲。如果应用程序尝试写入的数据超过指示的内容长度,或者在写入指示的数量之前关闭 OutputStream,将抛出异常。
启用输出流时,无法自动处理身份验证和重定向。如果需要身份验证或重定向,则在读取响应时将抛出 HttpRetryException。可以查询此异常以获取错误的详细信息。
此方法必须在连接 URLConnection 之前调用。
通过调用此方法设置的内容长度优先于
setFixedLengthStreamingMode(int)
设置的任何值。- 参数:
-
contentLength
- 将写入 OutputStream 的字节数。 - 抛出:
-
IllegalStateException
- 如果 URLConnection 已连接或已启用不同的流模式。 -
IllegalArgumentException
- 如果指定的内容长度小于零。 - 自:
- 1.7
-
setChunkedStreamingMode
public void setChunkedStreamingMode(int chunklen) 此方法用于在内容长度事先未知的情况下启用 HTTP 请求体的流式传输。在此模式下,使用分块传输编码来发送请求体。请注意,并非所有 HTTP 服务器都支持此模式。启用输出流时,无法自动处理身份验证和重定向。如果需要身份验证或重定向,则在读取响应时将抛出 HttpRetryException。可以查询此异常以获取错误的详细信息。
此方法必须在连接 URLConnection 之前调用。
- 参数:
-
chunklen
- 每个块中要写入的字节数,包括一个十六进制字符串作为块大小标头(至少 1 字节)、两个 CRLF(4 字节)和最小有效载荷长度为 1 字节。如果 chunklen 小于或等于 5,则将使用更高的默认值。 - 抛出:
-
IllegalStateException
- 如果 URLConnection 已连接或已启用不同的流模式。 - 自:
- 1.5
- 参见:
-
getHeaderField
返回第n
th 头字段的值。某些实现可能将第0
th 头字段视为特殊字段,即作为 HTTP 服务器返回的状态行。此方法可与
getHeaderFieldKey
方法一起使用,以遍历消息中的所有头字段。- 覆盖:
-
getHeaderField
在类URLConnection
- 参数:
-
n
- 一个索引,其中n>=0
。 - 返回:
-
第
n
th 头字段的值,如果值不存在则返回null
。 - 参见:
-
setFollowRedirects
public static void setFollowRedirects(boolean set) 设置此类是否应自动跟随 HTTP 重定向(响应代码为 3xx)。 默认为 true。小程序无法更改此变量。如果存在安全管理器,此方法首先调用安全管理器的
checkSetFactory
方法以确保允许该操作。这可能导致 SecurityException。- 参数:
-
set
- 一个指示是否自动跟随 HTTP 重定向的boolean
。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkSetFactory
方法不允许该操作。 - 参见:
-
getFollowRedirects
public static boolean getFollowRedirects()返回一个指示是否应自动跟随 HTTP 重定向(3xx)的boolean
。- 返回:
-
如果应自动跟随 HTTP 重定向,则返回
true
,否则返回false
。 - 参见:
-
setInstanceFollowRedirects
public void setInstanceFollowRedirects(boolean followRedirects) 设置此HttpURLConnection
实例是否应自动跟随 HTTP 重定向(响应代码为 3xx)。默认值来自 followRedirects,默认为 true。
- 参数:
-
followRedirects
- 一个指示是否自动跟随 HTTP 重定向的boolean
。 - 自:
- 1.3
- 参见:
-
getInstanceFollowRedirects
public boolean getInstanceFollowRedirects()返回此HttpURLConnection
的instanceFollowRedirects
字段的值。- 返回:
-
此
HttpURLConnection
的instanceFollowRedirects
字段的值。 - 自:
- 1.3
- 参见:
-
setRequestMethod
设置 URL 请求的方法,其中之一:- GET
- POST
- HEAD
- OPTIONS
- PUT
- DELETE
- TRACE
- 参数:
-
method
- HTTP 方法 - 抛出:
-
ProtocolException
- 如果无法重置方法或请求的方法对 HTTP 不合法。 -
SecurityException
- 如果设置了安全管理器且方法为 "TRACE",但未授予 "allowHttpTrace" NetPermission。 - 参见:
-
getRequestMethod
获取请求方法。- 返回:
- HTTP 请求方法
- 参见:
-
getResponseCode
从 HTTP 响应消息中获取状态代码。例如,在以下状态行的情况下:HTTP/1.0 200 OK HTTP/1.0 401 Unauthorized
分别返回 200 和 401。如果无法从响应中分辨出代码(即,响应不是有效的 HTTP),则返回 -1。- 返回:
- HTTP 状态码,或 -1
- 抛出:
-
IOException
- 如果连接到服务器时发生错误。
-
getResponseMessage
从服务器返回的 HTTP 响应消息中获取 HTTP 响应消息(如果有)。从类似以下响应的响应中:HTTP/1.0 200 OK HTTP/1.0 404 Not Found
分别提取字符串 "OK" 和 "Not Found"。如果无法从响应中分辨出任何消息(结果不是有效的 HTTP),则返回 null。- 返回:
-
HTTP 响应消息,或
null
- 抛出:
-
IOException
- 如果连接到服务器时发生错误。
-
disconnect
public abstract void disconnect()表示在不久的将来不太可能有其他请求发送到服务器。调用disconnect()不应意味着这个HttpURLConnection实例可以被重用于其他请求。 -
usingProxy
public abstract boolean usingProxy()表示连接是否经过代理。如果连接已知经过代理或已经通过代理,此方法返回true
,如果连接永远不会经过代理或无法确定是否使用代理,则返回false
。- 返回:
- 一个布尔值,指示连接是否使用代理。
-
getPermission
返回一个代表连接到目标主机和端口所需权限的SocketPermission
对象。- 覆盖:
-
getPermission
在类URLConnection
- 返回:
-
一个代表连接到目标主机和端口所需权限的
SocketPermission
对象。 - 抛出:
-
IOException
- 如果计算权限时发生错误。
-
getErrorStream
如果连接失败但服务器仍然发送了有用的数据,则返回错误流。典型的例子是当HTTP服务器响应404时,在connect中将引发FileNotFoundException,但服务器发送了一个包含建议的HTML帮助页面。此方法不会导致连接初始化。如果连接未连接,或者服务器在连接时没有错误,或者服务器有错误但没有发送错误数据,则此方法将返回null。这是默认行为。
- 返回:
- 如果有错误流,则返回错误流;如果没有错误,连接未连接或服务器未发送有用数据,则返回null。
-