Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤和異常

Java 多執行緒

Java 同步

Java 網路

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java API 和框架

Java 類參考

Java 有用資源

Java - HttpURLConnection 類



Java HttpURLConnection 類

java.net.HttpURLConnection 是一個抽象類,表示特定於 HTTP 的 URL 連線。此類的例項可用於讀取和寫入 URL 引用的資源。

例如 -

  • 如果您連線到協議為 HTTPURL,則 URL.openConnection() 方法會返回一個 HttpURLConnection 物件。

連線到 URL 的步驟

以下是連線到 URL 並開始處理的步驟。

  • 呼叫 URL.openConnection() 方法 以獲取基於 HTTP 的 URL 的 HttpURLConnection 物件。

  • 根據需要使用連線物件的各種 setter 方法更新設定引數和常規請求屬性。

  • 使用連線物件的 connect() 方法建立到遠端物件的連線。

  • 遠端物件可用後,訪問遠端物件的內容/標頭。

HttpURLConnection 類宣告

public abstract class HttpURLConnection
   extends URLConnection

HttpURLConnection 類欄位

序號 欄位和描述
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 狀態程式碼的整數。

42

protected String responseMessage

HTTP 響應訊息。

HttpURLConnection 類方法

HttpURLConnection 類有許多方法用於設定或確定有關連線的資訊,包括以下內容 -

序號 方法和描述
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 的 instanceFollowRedirects 欄位的值。

7

Permission getPermission()

返回一個 SocketPermission 物件,表示連線到目標主機和埠所需的許可權。

8

String getRequestMethod()

獲取請求方法。

9

int getResponseCode()

從 HTTP 響應訊息中獲取狀態碼。

10

String getResponseMessage()

獲取 HTTP 響應訊息(如果有),該訊息與伺服器返回的響應程式碼一起返回。

11

void setAuthenticator(Authenticator auth)

提供一個 Authenticator,當透過 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()

指示連線是否透過代理。

繼承

此類繼承以下類

  • java.lang.Object

  • java.net.URLConnection

Java HttpURLConnection 類示例

以下 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://tutorialspoint.tw");
         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 tutorialspoint.com.....
廣告