一、概述
该类位于java.net 声明:public abstract class
HttpURLConnection extends
URLConnection
支持 HTTP 特定功能的 URLConnection
每个 HttpURLConnection 实例都可用于生成单个请求,但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络。请求后在 HttpURLConnection 的 InputStream 或 OutputStream 上调用 close() 方法可以释放与此实例关联的网络资源,但对共享的持久连接没有任何影响。如果在调用 disconnect() 时持久连接空闲,则可能关闭基础套接字。
二、字段
1、protected String
method HTTP 方法(GET、POST、PUT 等)。
2、protected int
chunkLength 使用存储块编码流模式进行输出时的存储块长度。值 -1
表示对输出禁用存储块编码。
3、protected int
fixedContentLength 使用固定长度流模式时的固定内容长度。值 -1
表示对输出禁用固定长度流模式。
4、protected int
responseCode 表示三位字数的 HTTP 状态码 (Status-Code) 的 int
。
- 1xx:Informational
- 2xx:Success
- 3xx:Redirection
- 4xx:Client Error
- 5xx:Server Error
5、protected
String
responseMessage HTTP 响应消息。
6、protected boolean
instanceFollowRedirects 如果为 true
,则协议自动执行重定向。如果为
,则协议不会自动执行重定向。
false
此字段由 setInstanceFollowRedirects
方法设置。其值由 getInstanceFollowRedirects
方法返回。
其默认值基于构造 HttpURLConnection 时静态 followRedirects 的值。
7、public static final int
HTTP_OK HTTP 状态码 200:OK。
8、public static final int
HTTP_CREATED HTTP 状态码 201:Created。
9、public static final int
HTTP_ACCEPTED HTTP 状态码 202:Accepted。
10、public static final int
HTTP_NOT_AUTHORITATIVE HTTP 状态码 203:Non-Authoritative Information。
11、public static final int
HTTP_NO_CONTENT HTTP 状态码 204:No Content。
12、public static final int
HTTP_RESET HTTP 状态码 205:Reset Content。
13、public static final int
HTTP_PARTIAL HTTP 状态码 206:Partial Content。
14、public static final int
HTTP_MULT_CHOICE HTTP 状态码 300:Multiple Choices。
15、public static final int
HTTP_MOVED_PERM HTTP 状态码 301:Moved Permanently。
16、public static final int
HTTP_MOVED_TEMP HTTP 状态码 302:Temporary Redirect。
17、public static final int
HTTP_SEE_OTHER HTTP 状态码 303:See Other。
18、public static final int
HTTP_NOT_MODIFIED HTTP 状态码 304:Not Modified。
19、public static final int
HTTP_USE_PROXY HTTP 状态码 305:Use Proxy。
20、public static final int
HTTP_BAD_REQUEST HTTP 状态码 400:Bad Request。
21、public static final int
HTTP_UNAUTHORIZED HTTP 状态码 401:Unauthorized。
22、public static final int
HTTP_PAYMENT_REQUIRED HTTP 状态码 402:Payment Required。
23、public static final int
HTTP_FORBIDDEN HTTP 状态码 403:Forbidden。
24、public static final int
HTTP_NOT_FOUND HTTP 状态码 404:Not Found。
25、public static final int
HTTP_BAD_METHOD HTTP 状态码 405:Method Not Allowed。
26、public static final int
HTTP_NOT_ACCEPTABLE HTTP 状态码 406:Not Acceptable。
27、public static final int
HTTP_PROXY_AUTH HTTP 状态码 407:Proxy Authentication Required
28、public static final int
HTTP_CLIENT_TIMEOUT HTTP 状态码 408:Request Time-Out。
29、public static final int
HTTP_CONFLICT HTTP 状态码 409:Conflict。
30、public static final int
HTTP_GONE HTTP 状态码 410:Gone。
31、public static final int
HTTP_LENGTH_REQUIRED HTTP 状态码 411:Length Required。
32、public static final int
HTTP_PRECON_FAILED HTTP 状态码 412:Precondition Failed。
33、public static final int
HTTP_ENTITY_TOO_LARGE HTTP 状态码 413:Request Entity Too Large。
34、public static final int
HTTP_REQ_TOO_LONG HTTP 状态码 414:Request-URI Too Large。
35、public static final int
HTTP_UNSUPPORTED_TYPE HTTP 状态码 415:Unsupported Media Type。
36、public static final int
HTTP_SERVER_ERROR 已过时。 放错了位置,它不应该存在。HTTP
状态码 500:Internal Server Error。
37、public static final int
HTTP_INTERNAL_ERROR HTTP 状态码 500:Internal Server Error。
38、public static final int
HTTP_NOT_IMPLEMENTED HTTP 状态码 501:Not Implemented。
39、public static final int
HTTP_BAD_GATEWAY HTTP 状态码 502:Bad Gateway。
40、public static final int
HTTP_UNAVAILABLE HTTP 状态码 503:Service Unavailable。
41、public static final int
HTTP_GATEWAY_TIMEOUT HTTP 状态码 504:Gateway Timeout。
42、public static final int
HTTP_VERSION HTTP 状态码 505:HTTP Version Not Supported。
三、构造方法:
protected HttpURLConnection(URL u) HttpURLConnection 的构造方法。
四、方法详细
1、public String getHeaderFieldKey(int n) 返回n
th 头字段的键。有些实现可能将0
th 头字段视为特殊状态行,即由 HTTP 服务器返回的状态行。在此情况下,getHeaderField(0)
返回状态行,而getHeaderFieldKey(0)
返回 null。
- 覆盖:
- 类
URLConnection
中的getHeaderFieldKey
- 参数:
n
- 索引,其中 n >=0。- 返回:
n
th 头字段的键;如果键不存在,则返回null
。
如果应用程序尝试写入的数据多于指示的内容长度,或者应用程序在写入指示的内容长度前关闭了 OutputStream,将抛出异常。 启用输出流时,不能自动处理验证和重定向。如果需要验证和重定向,则在读取响应时将抛出 HttpRetryException。可以查询此异常以获取错误的详细信息。 该方法必须在连接 URLConnection 前调用。
contentLength
- 将写入 OutputStream 的字节数。 IllegalStateException
- 如果已连接 URLConnection 或者已启用另外的流模式。 IllegalArgumentException
- 如果指定的内容长度小于零。
3、public void setChunkedStreamingMode(int chunklen) 此方法用于在预先不知道内容长度时启用没有进行内部缓冲的 HTTP 请求正文的流。在此模式下,使用存储块传输编码发送请求正文。注意,并非所有 HTTP 服务器都支持此模式。
启用输出流时,不能自动处理验证和重定向。如果需要验证和重定向,则在读取响应时将抛出 HttpRetryException。可以查询此异常以获取错误的详细信息。 该方法必须在连接 URLConnection 前调用。
chunklen
- 要写入每个存储块的字节数。如果 chunklen 小于或等于零,则使用默认值。 IllegalStateException
- 如果已连接 URLConnection 或者已启用其他流模式。
4、public String getHeaderField(int n) 返回 n
th 头字段的值。有些实现可能将 0
th 头字段视为特殊状态行,即由 HTTP 服务器返回的状态行。
此方法可以与 getHeaderFieldKey
方法一起使用来迭代消息中的所有头。
覆盖:
类 URLConnection 中的 getHeaderField
参数:
n - 索引,其中 n>=0。
返回:
nth 头字段的值;如果值不存在,则返回 null。
5、public static void setFollowRedirects(boolean set) 设置此类是否应该自动执行 HTTP 重定向(响应代码为 3xx 的请求)。默认情况下为 true。Applet 不能更改此变量。如果存在安全管理器,则此方法首先调用安全管理器的 checkSetFactory
方法来确保允许操作。这可能会导致 SecurityException 异常。
set
- 指示是否进行 HTTP 重定向的 boolean
值。 SecurityException
- 如果安全管理器存在并且其 checkSetFactory
方法不允许进行此操作。
6、public static boolean getFollowRedirects() 返回指示是否应该自动执行 HTTP 重定向 (3xx) 的 boolean
值。
7、public void setInstanceFollowRedirects(boolean followRedirects) 设置此 HttpURLConnection
实例是否应该自动执行 HTTP 重定向(响应代码为 3xx 的请求)。
默认值来自 followRedirects,其默认情况下为 true。
8、public boolean getInstanceFollowRedirects() 返回此HttpURLConnection
的instanceFollowRedirects
字段的值。
9、public void setRequestMethod(String method) throws ProtocolException 设置 URL 请求的方法,
- GET
- POST
- HEAD
- OPTIONS
- PUT
- DELETE
- TRACE
ProtocolException
- 如果无法重置方法或者请求的方法对 HTTP 无效。
10、public String getRequestMethod() 获取HTTP请求方法。
11、public int getResponseCode()throws IOException 从 HTTP 响应消息获取状态码。如果无法从响应中识别任何代码(即响应不是有效的 HTTP),则返回 -1。
IOException
- 如果连接到服务器时发生错误。HTTP/1.0 200 OK HTTP/1.0 401 Unauthorized
将分别返回 200 和 401。
HTTP/1.0 200 OK HTTP/1.0 404 Not Found
分别提取 String "OK" 和 "Not Found"。如果无法从响应识别任何字符(结果不是有效的 HTTP),则返回 null。
13、public long
getHeaderFieldDate(String name,long Default) 返回解析为日期的指定字段的值。结果为指定字段表示的距离格林威治标准时间
1970 年 1 月 1 日的毫秒数。
有些连接类型(例如 http-ng
)具有预解析头,所以存在这种形式的
getHeaderField
。用于该类型的连接可重写此方法和缩短解析过程。
- 覆盖:
- 类
URLConnection
中的
getHeaderFieldDate
- 参数:
name
- 头字段的名称。Default
- 默认值。- 返回:
- 字段的值,解析为日期。如果该字段缺少或有错误,则返回
Default
参数的值。
14、public abstract void disconnect() 指示近期服务器不太可能有其他请求。调用 disconnect() 并不意味着可以对其他请求重用此 HttpURLConnection 实例。
15、public abstract boolean
usingProxy()
16、public
Permission
getPermission() throws
IOException 返回一个权限对象,其代表建立此对象表示的连接所需的权限。
如果建立连接不需要任何权限,则此方法返回 null。默认情况下,此方法返回 java.security.AllPermission
。子类应重写此方法并返回一个权限对象,该对象最能代表用于建立到 URL 的连接所需的权限。例如表示
file:
URL 的 URLConnection
将返回 java.io.FilePermission
对象。
返回的权限可能取决于连接的状态。例如,连接之前的权限可能不同于连接之后的权限。例如,一个 HTTP 服务器(如 foo.com)可能将连接重定向到一台不同的主机(如 bar.com)。在连接之前,连接返回的权限将代表连接到 foo.com 所需的权限,而连接之后返回的权限将是连接到 bar.com 所需的权限。
使用权限通常有两个目的:保护通过 URLConnection 获取的对象的缓存;检查接收方的权限以了解特定的 URL。第一种情况下,应在获取对象之后 再获取权限。例如,在一个 HTTP 连接中,这将代表连接到最终将从该主机获取数据的主机的权限。第二种情况下,应在连接之前 对权限进行获取和检查。
- 覆盖:
- 类
URLConnection
中的
getPermission
- 返回:
- 代表建立此 URLConnection 表示的连接所需的权限的权限对象。
- 抛出:
IOException
- 如果计算权限需要网络或文件 I/O 并且在计算过程中出现异常。
17、public InputStream
getErrorStream()
此方法不会导致启用连接。如果没有建立连接,或者在连接时服务器没有发生错误,或服务器出错但没有发送错误数据,则此方法返回 null。这是默认设置。