java.net.HttpURLConnection 是一个抽象类,表示特定于 HTTP 的 URL 连接。此类的实例可用于读取和写入 URL 引用的资源。

例如 -

  • 如果连接到协议为 HTTP 的 URL,则 URL.openConnection() 方法将返回 HttpURLConnection 对象。

与 URL 建立连接的步骤

以下是连接到 URL 并开始处理的步骤。

  • 调用 URL.openConnection() 方法来获取 HTTP 的 HttpURLConnection 对象基于 URL。

  • 使用连接对象的各种 setter 方法根据需要更新设置参数和常规请求属性。

  • 创建连接使用连接对象的 connect() 方法连接到远程对象。

  • 一旦远程对象可用,就访问远程对象的内容/标头。

声明

public abstract class HttpURLConnection
   extends URLConnection 

字段

Sr.编号字段和说明
1

protected int chunkLength

使用分块编码流模式输出时的块长度。
2

protected int fixedContentLength

使用固定长度流时的固定内容长度模式。
3

protected long fixedContentLengthLong

使用固定长度流时的固定内容长度模式。
4

static int HTTP_ACCEPTED

HTTP 状态代码 202:已接受。
5

static int HTTP_BAD_GATEWAY

HTTP 状态代码 502:错误网关。
6

static int HTTP_BAD_METHOD

HTTP 状态代码 405:不允许的方法。
7

static int HTTP_BAD_REQUEST

HTTP 状态代码 400:错误请求。
8

static int HTTP_CLIENT_TIMEOUT

HTTP 状态代码 408:请求超时。
9

static int HTTP_CONFLICT

HTTP 状态代码 409:冲突。
10

static int HTTP_CREATED

HTTP 状态代码 201:已创建。
11

static int HTTP_ENTITY_TOO_LARGE

HTTP 状态代码 413:请求实体太大。
12

static int HTTP_FORBIDDEN

HTTP 状态代码 403:禁止。
13

static int HTTP_GATEWAY_TIMEOUT

HTTP 状态代码 504:网关超时。
14

static int HTTP_GONE

HTTP 状态代码 410:消失。
15

static int HTTP_INTERNAL_ERROR

HTTP 状态代码 500:内部服务器错误。
16

static int HTTP_LENGTH_REQUIRED

HTTP 状态代码 411:长度必需。
17

static int HTTP_MOVED_PERM

HTTP 状态代码 301:永久移动。
18

static int HTTP_MOVED_TEMP

HTTP 状态代码 302:临时重定向。
19

static int HTTP_MULT_CHOICE

HTTP 状态代码 300:多种选择。
20

static int HTTP_NO_CONTENT

HTTP 状态代码 204:无内容。
21

static int HTTP_NOT_ACCEPTABLE

HTTP 状态代码 406:不可接受。
22

static int HTTP_NOT_AUTHORITATIVE

HTTP 状态代码 203:非权威信息。
23

static int HTTP_NOT_FOUND

HTTP 状态代码 404:未找到。
24

static int HTTP_NOT_IMPLMENTED

HTTP 状态代码 501:未实现。
25

static int HTTP_NOT_MODIFIED

HTTP 状态代码 304:未修改。
26

static int HTTP_OK

HTTP 状态代码 200:正常。
27

static int HTTP_PARTIAL

HTTP 状态代码 206:部分内容。
28

static int HTTP_PAYMENT_REQUIRED

HTTP 状态代码 402:需要付款。
29

static int HTTP_PRECON_FAILED

HTTP 状态代码 412:先决条件失败。
30

static int HTTP_PROXY_AUTH

HTTP 状态代码 407:需要代理身份验证。
31

static int HTTP_REQ_TOO_LONG

HTTP 状态代码 414:请求 URI 太大。
32

static int HTTP_RESET

HTTP 状态代码 205:重置内容。
33

static int HTTP_SEE_OTHER

HTTP 状态代码 303:请参阅其他。
34

static int HTTP_UNAUTHORIZED

HTTP 状态代码 401:未经授权。
35

static int HTTP_UNAVAILABLE

HTTP 状态代码 503:服务不可用。
36

static int HTTP_UNSUPPORTED_TYPE

HTTP 状态代码 415:不支持的媒体类型。
37

static int HTTP_USE_PROXY

HTTP 状态代码 305:使用代理。
38

static int HTTP_VERSION

HTTP 状态代码 505:不支持 HTTP 版本。
39

protected boolean instanceFollowRedirects

如果为 true,协议将自动遵循重定向。
40

受保护的字符串方法

HTTP 方法(GET、POST、PUT 等)。
41

protected int responseCode

表示三位数 HTTP 状态代码的 int。
42

受保护的字符串responseMessage

HTTP 响应消息。

方法

HttpURLConnection 类有许多方法用于设置或确定有关连接的信息,包括以下内容 -

序号.方法 &说明
1

abstract void disconnect()

表示其他请求服务器在不久的将来不太可能。

2

InputStream getErrorStream()

如果连接失败但服务器仍然发送了有用的数据,则返回错误流。

3

static boolean getFollowRedirects()

返回一个布尔值,指示是否 HTTP 重定向 ( 3xx) 应自动跟随。

4

StringgetHeaderField(int n)

返回第 n 个标头字段的值。

5

String getHeaderFieldKey(int n)

返回第 n 个标头字段的键。

6

boolean getInstanceFollowRedirects()

返回此 HttpURLConnection 的 instanceFollowRedirects 字段的值。

7

Permission getPermission()

返回一个 SocketPermission 对象,表示连接到目标主机和端口所需的权限。

8

String getRequestMethod()

获取请求方法。

9

int getResponseCode()

从 HTTP 响应消息中获取状态代码。

10

String getResponseMessage()

获取与服务器返回的响应代码一起返回的 HTTP 响应消息(如果有)。

11

void setAuthenticator(Authenticator auth)

提供身份验证器当通过 HTTP 协议请求对此 HttpURLConnection 进行身份验证时使用。

12

void setChunkedStreamingMode(int chunklen)

当内容长度事先未知时,此方法用于启用 HTTP 请求正文的流式传输,而无需内部缓冲。

13

void setFixedLengthStreamingMode(int contentLength)

当预先知道内容长度时,此方法用于启用 HTTP 请求正文的流式传输,无需内部缓冲。

14

void setFixedLengthStreamingMode(long contentLength)

此方法用于启用流式传输当预先知道内容长度时,没有内部缓冲的 HTTP 请求正文。

15

void setInstanceFollowRedirects(boolean followRedirects)

设置此 HttpURLConnection 实例是否应自动遵循 HTTP 重定向(响应代码为 3xx 的请求)。

17

void setRequestMethod(String method)

设置 URL 请求的方法,其中之一:GET POST HEAD OPTIONS PUT DELETE TRACE 是合法的,但受协议限制。

18

abstract boolean usingProxy()

指示连接是否通过代理。

扩展

此类扩展了以下类

  • java.lang.Object

  • java.net.URLConnection

示例

以下 HttpURLConnection 程序连接到从命令行输入的 URL。

如果 URL 表示 HTTP 资源,则连接被转换为 HttpURLConnection,并且一次一行读取资源中的数据。

package com.yxjc123;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

public class HttpUrlConnectionDemo {
   public static void main(String [] args) {
      try {
         URL url = new URL("https://www.yxjc123.com");
         URLConnection urlConnection = url.openConnection();
         HttpURLConnection connection = null;
         if(urlConnection instanceof HttpURLConnection) {
            connection = (HttpURLConnection) urlConnection;
         }else {
            System.out.println("Please enter an HTTP URL.");
            return;
         }
         
         BufferedReader in = new BufferedReader(
            new InputStreamReader(connection.getInputStream()));
         String urlString = "";
         String current;
         
         while((current = in.readLine()) != null) {
            urlString += current;
         }
         System.out.println(urlString);
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
} 

此程序的示例运行将产生以下结果 -

输出

$ java HttpURLConnection

.....a complete HTML content of home page of yxjc123.com.....