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

时间: 2024-08-27 14:51:10

java中的HttpURLConnection的相关文章

HTTP协议报文、工作原理及Java中的HTTP通信技术详解

一.web及网络基础       1.HTTP的历史            1.1.HTTP的概念:                 HTTP(Hyper Text Transfer Protocol,超文本传输协议)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器.                 它是一个应用层协议,承载于TCP之上.由请求和响应构成,是一个标准的客户端服务器模型            1.2.HTTP的发展历史:          

JAVA中如何设置代理服务器,取消代理服务器

1.简介 代理服务器(Proxy Server)是一种重要的服务器安全功能,它的工作主要在开放系统互联(OSI)模型的会话层,从而起到防火墙的作用.代理服务器大多被用来连接INTERNET(国际互联网)和INTRANET(局域网).主要功能:就是代理网络用户去取得网络信息.形象的说,它是网络信息的中转站.本文主要介绍如何使用java代码设置代理服务器. 主服务器为了防止被伪用户攻击,统一让用户通过代理服务器去访问主服务器,这样做的安全性是显而易见的.一个图理解代理服务器及作用 2.使用 在JAV

java中设置代理的两种方式

1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式.直接上代码. 2 采用设置系统属性 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 import jav

android中的HttpUrlConnection的使用之一

在我们之前学习Java的网络编程当中,我们已经见过HttpUrlConnection类的使用.HttpUrlConnect在Java是一个支持http特定的功能一个类,在许多的网络编程经常使用到它.今天我在这里记录的是android中使用HttpUrlConnection,之前我还学过使用异步加载来加载一个网站,它使用的原理同样是多线程,但是它使用的是用json来解析一个网站,而不是直接使用域名也就是网址来解析一个网站,而将要介绍的HttpUrlConnection是使用域名来解析一个网站的,当

简述Java中Http/Https请求监听方法

一.工欲善其事必先利其器 做Web开发的人总免不了与Http/Https请求打交道,很多时候我们都希望能够直观的的看到我们发送的请求参数和服务器返回的响应信息,这个时候就需要借助于某些工具啦.本文将采用Fiddler2作为分析工具,Fiddler很强大,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,是越墙抓包之利器.关于工具的介绍可以参考下面的链接: http://www.cnblogs.com/TankXiao/archive/2012/02

Java中的 Scanner简述(企业笔试在线编程的输入控制)

摘要: 最近进行企业在线笔试时,发现企业的笔试平台大都使用赛码网(虽然槽点很多),而且在线编程都需要使用Scanner来读取程序的输入,因此,笔者就在先辈们的成果上对Scanner做了一份全新的.详细的总结.我们知道,java.util.Scanner是Java5的新特征,主要功能是简化文本扫描.这个类最实用的地方表现在获取控制台输入,其他的功能都很鸡肋,尽管Java API文档中列举了大量的API方法,但是都不怎么地,特此简述. 版权声明: 本文原创作者:书呆子Rico 作者博客地址:http

Java 中的纤程库 – Quasar

来源:鸟窝, colobu.com/2016/07/14/Java-Fiber-Quasar/ 如有好文章投稿,请点击 → 这里了解详情 最近遇到的一个问题大概是微服务架构中经常会遇到的一个问题: 服务 A 是我们开发的系统,它的业务需要调用 B.C.D 等多个服务,这些服务是通过http的访问提供的. 问题是 B.C.D 这些服务都是第三方提供的,不能保证它们的响应时间,快的话十几毫秒,慢的话甚至1秒多,所以这些服务的Latency比较长.幸运地是这些服务都是集群部署的,容错率和并发支持都比较

android中的HttpURLConnection和HttpClient实现app与pc数据交互

自学android的这几天很辛苦,但是很满足,因为每当学到一点点知识点都会觉得很开心,觉得今天是特别有意义的,可能这个就是一种莫名的热爱吧. 下面来说说今天学习的HttpURLConnection和HttpClient的区别吧,其实这2种都能进行客户端和服务器的数据交互,只是HttpClient封装的更完全. 先看下案例吧 第一种HttpURLConnection访问服务器: 客服端代码: package com.example.demo01; import java.io.IOExceptio

JAVA中发送电子邮件的方法

JAVA中发送邮件的方法不复杂,使用sun的JavaMail的架包就可以实现. 一.下载JavaMail的架包,并导入项目中,如下: 二.附上代码例子,如下: 1.在main函数中对各项参数进行赋值(参数说明已进行备注),即可通过send函数进行发送邮件操作. 1 public class TestEmail { 2 3 private final static String TIMEOUT_MS = "20000"; 4 5 public static void main(Strin