Java 简明教程

Java - HttpURLConnection Class

Java HttpURLConnection Class

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

例如 -

  1. 如果你连接到协议为 HTTPURL,URL.openConnection() 方法返回一个 HttpURLConnection 对象。

Steps to make a connection to a URL

以下是建立与 URL 的连接并开始处理的步骤:

  1. 调用 URL.openConnection() method 以获取基于 HTTP 的 URL 的 HttpURLConnection 对象。

  2. 根据需要使用 connection 对象的各种 setter 方法来更新设置参数和一般请求属性。

  3. 使用 connection 对象的 connect() 方法来创建到远程对象的连接。

  4. 在远程对象可用后,访问远程对象的正文/标头。

HttpURLConnection Class Declaration

public abstract class HttpURLConnection
   extends URLConnection

HttpURLConnection Class Fields

Sr.No.

Field & Description

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_IMPLEMENTED 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

protected String method HTTP 方法(GET、POST、PUT 等)。

41

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

42

protected String responseMessage HTTP 响应消息。

HttpURLConnection Class Methods

HttpURLConnection 类具有多种用于设置或确定连接信息的函数,包括以下内容 −

Sr.No.

Method & Description

1

abstract void disconnect() 表示近期内不太可能向服务器发出其他请求。

2

InputStream getErrorStream() 如果连接失败但服务器仍发送有用数据,则返回错误流。

3

static boolean getFollowRedirects() 返回一个布尔值,指示是否应自动遵循 HTTP 重定向(3xx)。

4

String getHeaderField(int n) 返回第 n 个标头字段的值。

5

String getHeaderFieldKey(int n) 返回第 n 个标头字段的键。

6

boolean getInstanceFollowRedirects() 返回此 HttpURLConnection 的实例 FollowRedirects 字段的值。

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

static void setFollowRedirects(boolean set) 设置该类是否应自动遵从 HTTP 重定向(响应代码为 3xx 的请求)。

16

void setInstanceFollowRedirects(boolean followRedirects) 设置该 HttpURLConnection 实例是否应自动遵从 HTTP 重定向(响应代码为 3xx 的请求)。

17

void setRequestMethod(String method) 设置 URL 请求的方法,其中一项:GET POST HEAD OPTIONS PUT DELETE TRACE 是合法的,受协议限制。

18

abstract boolean usingProxy() 指示该连接是否通过代理进行。

Extends

此类扩展以下类

  1. java.lang.Object

  2. java.net.URLConnection

Example of Java HttpURLConnection Class

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

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

package com.tutorialspoint;

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.tutorialspoint.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();
      }
   }
}

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

Output

$ java HttpURLConnection

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