码迷,mamicode.com
首页 > 编程语言 > 详细

java中的HttpURLConnection

时间:2014-12-31 18:26:47      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:java   httpurlconnection   

一、概述

该类位于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)  返回 nth 头字段的键。有些实现可能将 0th 头字段视为特殊状态行,即由 HTTP 服务器返回的状态行。在此情况下,getHeaderField(0) 返回状态行,而 getHeaderFieldKey(0) 返回 null。
覆盖:
URLConnection 中的 getHeaderFieldKey
参数:
n - 索引,其中 n >=0。
返回:
nth 头字段的键;如果键不存在,则返回 null
2、public void setFixedLengthStreamingMode(int contentLength) 此方法用于在预先已知内容长度时启用没有进行内部缓冲的 HTTP 请求正文的流。

如果应用程序尝试写入的数据多于指示的内容长度,或者应用程序在写入指示的内容长度前关闭了 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) 返回 nth 头字段的值。有些实现可能将 0th 头字段视为特殊状态行,即由 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()  返回此 HttpURLConnectioninstanceFollowRedirects 字段的值。 

9、public void setRequestMethod(String method)  throws ProtocolException 设置 URL 请求的方法,
  • GET
  • POST
  • HEAD
  • OPTIONS
  • PUT
  • DELETE
  • TRACE
以上方法之一是合法的,具体取决于协议的限制。默认方法为 GET。
抛出:
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。

12、public String getResponseMessage() throws IOException获取与来自服务器的响应代码一起返回的 HTTP 响应消息(如果有)。对于如下响应:
 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()  
如果连接失败但服务器仍然发送了有用数据,则返回错误流。典型示例是,当 HTTP 服务器使用 404 响应时,将导致在连接中抛出 FileNotFoundException,但是服务器同时还会发送建议如何操作的 HTML 帮助页。

此方法不会导致启用连接。如果没有建立连接,或者在连接时服务器没有发生错误,或服务器出错但没有发送错误数据,则此方法返回 null。这是默认设置。

返回:
错误流(如果存在);如果没有发生错误、没有建立连接或服务器没有发送有用数据,则返回 null

java中的HttpURLConnection

标签:java   httpurlconnection   

原文地址:http://blog.csdn.net/u010142437/article/details/42297385

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!