HttpURLConnection 類別

定義

一個支援 HTTP 特定功能的 URLConnection。

[Android.Runtime.Register("java/net/HttpURLConnection", DoNotGenerateAcw=true)]
public abstract class HttpURLConnection : Java.Net.URLConnection
[<Android.Runtime.Register("java/net/HttpURLConnection", DoNotGenerateAcw=true)>]
type HttpURLConnection = class
    inherit URLConnection
繼承
衍生
屬性

備註

一個支援 HTTP 特定功能的 URLConnection。 詳情請參閱 規格

此類別的用法遵循模式:ol<li 透過呼叫>並將結果<鑄造成 ,獲得 新 > 。HttpURLConnectionURL#openConnection() URL.openConnection()HttpURLConnection <李>,準備請求書。 請求的主要屬性是其 URI。 請求標頭也可能包含如憑證、偏好內容類型及會話 Cookie 等元資料。 <li>可選擇性地上傳請求文。 若實例包含請求實體,必須設定為 #setDoOutput(boolean) setDoOutput(true) 。 透過寫入由 返回的 #getOutputStream()串流來傳輸資料。 <李>:請閱讀回覆。 回應標頭通常包含元資料,如回應內容類型與長度、修改日期及會話 Cookie。 回應體可從回 #getInputStream()傳的串流中讀取。 若回應無實體,該方法回傳的串流為空。 <李>,斷開連結。 一旦讀取 HttpURLConnection 回應主體,應透過呼叫 #disconnect()來關閉 。 斷開連接會釋放連接所持有的資源,使其可以關閉或重複使用。 </ol>

例如,要取得以下 http://www.android.com/網頁:

{@code
              URL url = new URL("http://www.android.com/");
              HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
              try {
                InputStream in = new BufferedInputStream(urlConnection.getInputStream());
                readStream(in);
              } finally {
                urlConnection.disconnect();
              }
            }

<h3>與 HTTPS< 的安全通訊/h3> 使用 URL#openConnection() “https” 方案呼叫 URL 會回傳 HttpsURLConnection,允許覆蓋預設 javax.net.ssl.HostnameVerifier HostnameVerifier 值 和 javax.net.ssl.SSLSocketFactory SSLSocketFactory。 由 SSLSocketFactory 建立的應用程式javax.net.ssl.SSLContext SSLContext提供自訂功能,可用於javax.net.ssl.X509TrustManager X509TrustManager驗證憑證鏈,並提供用戶端憑證的自訂javax.net.ssl.X509KeyManager X509KeyManager功能。 如需詳細資訊,請參閱 javax.net.ssl.HttpsURLConnection HttpsURLConnection

<h3>回應處理</h3>HttpURLConnection 將追蹤最多五個 HTTP 重定向。 它會跟隨從一個 Origin 伺服器跳到另一個伺服器的重定向。 此實作不會跟隨 HTTPS 至 HTTP 或反向的重定向。

如果 HTTP 回應顯示發生錯誤, #getInputStream() 則會拋出一個 IOException。 用來 #getErrorStream() 閱讀錯誤回應。 標頭可正常 #getHeaderFields()使用 ,

<h3>發佈內容</h3> 若要上傳資料至網頁伺服器,請使用 #setDoOutput(boolean) setDoOutput(true)

為了最佳表現,你應該在身體長度事先#setFixedLengthStreamingMode(int)已知時或不確定時打電話#setChunkedStreamingMode(int)。 否則 HttpURLConnection 將被迫在傳送前將整個請求體緩衝在記憶體中,浪費(甚至耗盡)堆積並增加延遲。

例如,要執行上傳:

{@code
              HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
              try {
                urlConnection.setDoOutput(true);
                urlConnection.setChunkedStreamingMode(0);

                OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
                writeStream(out);

                InputStream in = new BufferedInputStream(urlConnection.getInputStream());
                readStream(in);
              } finally {
                urlConnection.disconnect();
              }
            }

<h3>效能</h3> 此類別回傳的輸入與輸出串流是 <強>流,而非緩<衝/強>流。 大多數呼叫者應該將回傳的串流包裝成 java.io.BufferedInputStream BufferedInputStreamjava.io.BufferedOutputStream BufferedOutputStream。 僅進行批量讀寫的呼叫者可能會省略緩衝。

在傳輸大量資料到或從伺服器轉出時,使用串流限制同時記憶體中的資料量。 除非你需要整個主體同時存在記憶體,否則請以串流方式處理(而不是將整個主體儲存為單一位元組陣列或字串)。

為了降低延遲,此類別可能會重複使用同一底層 Socket ,用於多個請求/回應對。 因此,HTTP 連線可能會被開啟時間延長到不必要的時間。 呼叫 可能會 #disconnect() 將 socket 回傳到已連接的 socket 池中。

預設情況下,此請求實作HttpURLConnection會使用 gzip 壓縮,並自動解壓縮呼叫者的資料。#getInputStream() 此時會清除內容編碼與內容長度回應標頭。 可以透過在請求標頭中設定可接受的編碼來停用 Gzip 壓縮:

{@code
              urlConnection.setRequestProperty("Accept-Encoding", "identity");
            }

設定 Accept-Encoding 請求標頭會明確關閉自動解壓縮,並保留回應標頭;呼叫者必須根據回應的內容編碼標頭(Content-Encoding)進行解壓縮。

#getContentLength() 回傳已傳輸的位元組數,無法用來預測壓縮串流可讀取 #getInputStream() 多少位元組。 相反地,讀取該串流直到耗盡,也就是回 InputStream#read 傳 -1。

<h3>處理網路登入</h3> 部分 Wi-Fi 網路會封鎖網際網路存取,直到使用者點擊登入頁面。 這類登入頁面通常透過 HTTP 重定向來呈現。 你可以用來 #getURL() 測試連線是否被意外重定向。 此檢查在 <收到回應標頭後為強(strong>after<)或強標頭(strong> after )前不有效,你可以透過呼叫 #getHeaderFields()#getInputStream()觸發。 例如,為了檢查回應是否被重定向到意外的主機:

{@code
              HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
              try {
                InputStream in = new BufferedInputStream(urlConnection.getInputStream());
                if (!url.getHost().equals(urlConnection.getURL().getHost())) {
                  // we were redirected! Kick the user out to the browser to sign on?
                }
                ...
              } finally {
                urlConnection.disconnect();
              }
            }

<h3>HTTP 認證</h3>HttpURLConnection 支援 HTTP 基本認證。 使用 Authenticator 來設定虛擬機範圍的認證處理程序:

{@code
              Authenticator.setDefault(new Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                  return new PasswordAuthentication(username, password.toCharArray());
                }
              });
            }

除非搭配 HTTPS 搭配,否則這只是<強>而非<>強的安全使用者認證機制。 特別是使用者名稱、密碼、請求與回應皆在網路上傳輸,且未加密。

<h3>含 Cookies</h3> 的會話 為了建立並維護客戶端與伺服器間可能長存的會話,包含 HttpURLConnection 可擴充的 Cookie 管理器。 啟用虛擬機範圍的 Cookie 管理,使用及CookieHandlerCookieManager

{@code
              CookieManager cookieManager = new CookieManager();
              CookieHandler.setDefault(cookieManager);
            }

預設情況下, CookieManager 只接受 來自原始伺服器 的 Cookie。 另外還包含兩種政策: CookiePolicy#ACCEPT_ALLCookiePolicy#ACCEPT_NONE。 實施 CookiePolicy 以定義自訂政策。

預設 CookieManager 會將所有被接受的 Cookie 保留在記憶體中。 當虛擬機退出時,這些 cookie 會被遺忘。 實作 CookieStore 來定義自訂的 Cookie 商店。

除了 HTTP 回應設定的 Cookie 外,你也可以以程式化方式設定 Cookie。 要包含在 HTTP 請求標頭中,cookie 必須設定網域與路徑屬性。

預設情況下,新實例 HttpCookie 僅能與支援 RFC 2965 cookie 的伺服器連線。 許多網頁伺服器僅支援較舊的規範 RFC 2109。 為了與大多數網頁伺服器相容,請將 cookie 版本設為 0。

例如,法語中接收 www.twitter.com

{@code
              HttpCookie cookie = new HttpCookie("lang", "fr");
              cookie.setDomain("twitter.com");
              cookie.setPath("/");
              cookie.setVersion(0);
              cookieManager.getCookieStore().add(new URI("http://twitter.com/"), cookie);
            }

<h3>HTTP 方法</h3>

HttpURLConnection 預設使用此 GET 方法。 如果已經被叫到,它會使用POST#setDoOutput setDoOutput(true)。 其他 HTTP 方法(OPTIONSHEADPUTDELETETRACE、 和 )也#setRequestMethod可用於 。

<h3>代理</h3> 預設情況下,此類別會直接連接到 原始伺服器。 它也可以透過 Proxy.Type#HTTP HTTP OR Proxy.Type#SOCKS SOCKS 代理連接。 要使用代理,建立連線時就要使用 URL#openConnection(Proxy) URL.openConnection(Proxy)

<h3>IPv6 支援</h3>

此類別包含對 IPv6 的透明支援。 對於同時擁有 IPv4 和 IPv6 位址的主機,它會嘗試連接到同一主機的每個位址,直到建立連線為止。

<h3>回應快取</h3> Android 4.0(冰淇淋三明治,API 等級 15)包含回應快取。 請參閱 android.net.http.HttpResponseCache 有關在應用程式中啟用 HTTP 快取的說明。

<h3>避免早期版本<的錯誤/h3> 在 Android 2.2(Froyo)之前,這門課有一些令人沮喪的錯誤。 特別是,呼叫 close()InputStream 讀的連線可能會毒害連線池。 透過關閉連線池來解決這個問題:

{@code
            private void disableConnectionReuseIfNecessary() {
              // Work around pre-Froyo bugs in HTTP connection reuse.
              if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) {
                System.setProperty("http.keepAlive", "false");
              }
            }}

每個 實 HttpURLConnection 例可用於一對請求/回應。 此類別的實例並非執行緒安全。

新增於JDK1.1。

Java 文件 java.net.HttpURLConnection

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

建構函式

名稱 Description
HttpURLConnection(IntPtr, JniHandleOwnership)

用於建立 JNI 物件受管理表示的建構器;由執行時呼叫。

HttpURLConnection(URL)

HttpURL Connectnection 的建構器。

欄位

名稱 Description
HttpAccepted
已淘汰.

HTTP Status-Code 202:已接受。

HttpBadGateway
已淘汰.

HTTP Status-Code 502:壞閘道器。

HttpBadMethod
已淘汰.

HTTP Status-Code 405:不允許使用此方法。

HttpBadRequest
已淘汰.

HTTP Status-Code 400:錯誤請求。

HttpClientTimeout
已淘汰.

HTTP Status-Code 408:請求逾時。

HttpConflict
已淘汰.

HTTP Status-Code 409:衝突。

HttpCreated
已淘汰.

HTTP Status-Code 201:已建立。

HttpEntityTooLarge
已淘汰.

HTTP Status-Code 413:請求實體過大。

HttpForbidden
已淘汰.

HTTP Status-Code 403:禁止。

HttpGatewayTimeout
已淘汰.

HTTP Status-Code 504:閘道逾時。

HttpGone
已淘汰.

HTTP Status-Code 410:消失了。

HttpInternalError
已淘汰.

HTTP Status-Code 500:內部伺服器錯誤。

HttpLengthRequired
已淘汰.

HTTP Status-Code 411:需要長度。

HttpMovedPerm
已淘汰.

HTTP Status-Code 301:永久移動。

HttpMovedTemp
已淘汰.

HTTP Status-Code 302:臨時重定向。

HttpMultChoice
已淘汰.

HTTP Status-Code 300:多選題。

HttpNoContent
已淘汰.

HTTP Status-Code 204:無內容。

HttpNotAcceptable
已淘汰.

HTTP Status-Code 406:不可接受。

HttpNotAuthoritative
已淘汰.

HTTP Status-Code 203:非權威資訊。

HttpNotFound
已淘汰.

HTTP Status-Code 404:未找到。

HttpNotImplemented
已淘汰.

HTTP Status-Code 501:未實作。

HttpNotModified
已淘汰.

HTTP Status-Code 304:未修改。

HttpOk
已淘汰.

HTTP Status-Code 200:好的。

HttpPartial
已淘汰.

HTTP Status-Code 206:部分內容。

HttpPaymentRequired
已淘汰.

HTTP Status-Code 402:需付費。

HttpPreconFailed
已淘汰.

HTTP Status-Code 412:前置條件失敗。

HttpProxyAuth
已淘汰.

HTTP Status-Code 407:需要代理驗證。

HttpReqTooLong
已淘汰.

HTTP Status-Code 414:Request-URI 太大。

HttpReset
已淘汰.

HTTP Status-Code 205:重設內容。

HttpSeeOther
已淘汰.

HTTP Status-Code 303:參見其他。

HttpServerError
已淘汰.

HTTP Status-Code 500:內部伺服器錯誤。

HttpUnauthorized
已淘汰.

HTTP Status-Code 401:未經授權。

HttpUnavailable
已淘汰.

HTTP Status-Code 503:服務無法使用。

HttpUnsupportedType
已淘汰.

HTTP Status-Code 415:不支援媒體類型。

HttpUseProxy
已淘汰.

HTTP Status-Code 305:使用代理伺服器。

HttpVersion
已淘汰.

HTTP Status-Code 505:HTTP 版本不支援。

屬性

名稱 Description
AllowUserInteraction

回傳該物件欄位的 allowUserInteraction 值。 -或- 設定此allowUserInteraction域的值URLConnection

(繼承來源 URLConnection)
ChunkLength

使用區塊編碼串流模式作為輸出時的區塊長度。

Class

回傳此 Object的執行時類別。

(繼承來源 Object)
Connected

false,該連線物件尚未建立指向指定 URL 的通訊連結。

(繼承來源 URLConnection)
ConnectTimeout

回傳連線逾時設定。 -或- 設定一個指定的逾時值,單位為毫秒,用於開啟此 URLConnection 所參考資源的通訊連結。

(繼承來源 URLConnection)
Content

擷取此 URL 連線的內容。

(繼承來源 URLConnection)
ContentEncoding

回傳標頭欄位的 content-encoding 值。

(繼承來源 URLConnection)
ContentLength

回傳標頭欄位的 content-length 值。

(繼承來源 URLConnection)
ContentLengthLong

回傳標頭欄位的值 content-length 為 long。

(繼承來源 URLConnection)
ContentType

回傳標頭欄位的 content-type 值。

(繼承來源 URLConnection)
Date

回傳標頭欄位的 date 值。

(繼承來源 URLConnection)
DefaultUseCaches

回傳 的預設值 URLConnectionuseCaches 旗標。 -或- 將欄位的預設值 useCaches 設為指定值。

(繼承來源 URLConnection)
DoInput

回傳此 URLConnectiondoInput 旗標值。 -或- 將該doInput欄位的值URLConnection設為指定的值。

(繼承來源 URLConnection)
DoOutput

回傳此 URLConnectiondoOutput 旗標值。 -或- 將該doOutput欄位的值URLConnection設為指定的值。

(繼承來源 URLConnection)
ErrorStream

如果連線失敗,但伺服器仍傳送有用資料,則回傳錯誤串流。

Expiration

回傳標頭欄位的 expires 值。

(繼承來源 URLConnection)
FixedContentLength

使用固定長度串流模式時的固定內容長度。

FixedContentLengthLong

使用固定長度串流模式時的固定內容長度。

FollowRedirects

回傳 A boolean 表示是否應該自動執行 HTTP 重定向(3xx)。 -或- 設定 HTTP 重定向(響應代碼為 3xx 的請求)是否應自動接續此類別。

Handle

底層 Android 實例的帳號。

(繼承來源 Object)
HeaderFields

回傳一個不可修改的標頭欄位映射。

(繼承來源 URLConnection)
IfModifiedSince

回傳該物件 ifModifiedSince 欄位的值。 -或- 將此ifModifiedSince欄位的值URLConnection設為指定的值。

(繼承來源 URLConnection)
InputStream

回傳一個從此開放連接讀取的輸入串流。

(繼承來源 URLConnection)
InstanceFollowRedirects

回傳此HttpURLConnectioninstanceFollowRedirects欄位的值。 -或- 設定 HTTP 重定向(回應代碼為 3xx 的請求)是否應自動接續此 HttpURLConnection 實例。

JniIdentityHashCode

取得由互通執行時指派給此 Java 對等端的身份雜湊碼。

(繼承來源 Object)
JniManagedPeerState

一個支援 HTTP 特定功能的 URLConnection。

(繼承來源 JavaObject)
JniPeerMembers

一個支援 HTTP 特定功能的 URLConnection。

LastModified

回傳標頭欄位的 last-modified 值。

(繼承來源 URLConnection)
Method

HTTP 方法(GET、POST、PUT 等)

OutputStream

回傳一個寫入此連線的輸出串流。

(繼承來源 URLConnection)
PeerReference

取得這個 Java 節點的 JNI 物件參考。

(繼承來源 Object)
Permission

回傳一個權限物件,代表建立該物件所代表連線所需的權限。

(繼承來源 URLConnection)
ReadTimeout

回傳設定以進行讀取逾時。 -或- 將讀取逾時設定為指定的逾時,單位為毫秒。

(繼承來源 URLConnection)
RequestMethod

取得請求方式。 -或- 設定 URL 請求的方法,以下之一: <UL><LI>取得 <LI>後文 <LI>head <li>選項 <li>put <li>刪除 <li>trace </ul> 是合法的,但受協議限制。

RequestProperties

回傳一個不可修改的一般請求屬性映射。

(繼承來源 URLConnection)
ResponseCode

從 HTTP 回應訊息取得狀態碼。

ResponseMessage

會從伺服器回傳 HTTP 回應訊息(如有)及回應代碼。

ThresholdClass

此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。

ThresholdType

此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。

Url

該網址代表此連線所開啟的萬維網上遠端物件。

(繼承來源 URLConnection)
URL

回傳此URLConnectionURL欄位的值。

(繼承來源 URLConnection)
UseCaches

回傳此URLConnectionuseCaches欄位的值。 -或- 將此useCaches欄位的值URLConnection設為指定的值。

(繼承來源 URLConnection)

方法

名稱 Description
AddRequestProperty(String, String)

新增由鍵值對指定的一般請求屬性。

(繼承來源 URLConnection)
Clone()

建立並回傳此物件的副本。

(繼承來源 Object)
Connect()

若尚未建立該連結,將開啟指向該 URL 所引用資源的通訊連結。

(繼承來源 URLConnection)
ConnectAsync()

一個支援 HTTP 特定功能的 URLConnection。

(繼承來源 URLConnection)
Construct(JniObjectReference, JniObjectReferenceOptions)

一個支援 HTTP 特定功能的 URLConnection。

(繼承來源 JavaObject)
Disconnect()

表示近期內不太可能有其他請求。

Dispose()

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
Dispose(Boolean)

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
DisposeUnlessReferenced()

一個支援 HTTP 特定功能的 URLConnection。

(繼承來源 JavaObject)
Equals(Object)

一個支援 HTTP 特定功能的 URLConnection。

(繼承來源 JavaObject)
Equals(Object)

表示是否有其他物體「等同」於此物。

(繼承來源 Object)
GetContent(Class[])

擷取此 URL 連線的內容。

(繼承來源 URLConnection)
GetHashCode()

回傳物件的雜湊碼值。

(繼承來源 Object)
GetHeaderField(Int32)

回傳 supnth</sup> 標頭欄位的<>值。

(繼承來源 URLConnection)
GetHeaderField(String)

回傳命名標頭欄位的值。

(繼承來源 URLConnection)
GetHeaderFieldDate(String, Int64)

回傳解析為日期的命名欄位值。

(繼承來源 URLConnection)
GetHeaderFieldInt(String, Int32)

回傳解析為數字後命名欄位的值。

(繼承來源 URLConnection)
GetHeaderFieldKey(Int32)

回傳 sup th/supn 標頭欄位的金鑰<>。<>

(繼承來源 URLConnection)
GetHeaderFieldLong(String, Int64)

回傳解析為數字後命名欄位的值。

(繼承來源 URLConnection)
GetRequestProperty(String)

回傳此連線所命名的一般請求屬性的值。

(繼承來源 URLConnection)
JavaFinalize()

當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。

(繼承來源 Object)
Notify()

喚醒一個正在該物件監視器上等待的執行緒。

(繼承來源 Object)
NotifyAll()

喚醒所有等待該物件監視器的執行緒。

(繼承來源 Object)
SetChunkedStreamingMode(Int32)

此方法用於在內容長度為 <b>not</b> 事先已知時,實現 HTTP 請求實體的串流,無需內部緩衝。

SetFixedLengthStreamingMode(Int32)

此方法用於在事先已知內容長度的情況下,實現 HTTP 請求實體的串流而不需內部緩衝。

SetFixedLengthStreamingMode(Int64)

此方法用於在事先已知內容長度的情況下,實現 HTTP 請求實體的串流而不需內部緩衝。

SetHandle(IntPtr, JniHandleOwnership)

設定 Handle 屬性。

(繼承來源 Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

一個支援 HTTP 特定功能的 URLConnection。

(繼承來源 JavaObject)
SetRequestProperty(String, String)

設定一般請求屬性。

(繼承來源 URLConnection)
ToArray<T>()

從這個 Java 陣列包裝器建立一個受管理陣列。

(繼承來源 Object)
ToString()

回傳物件的字串表示。

(繼承來源 Object)
UnregisterFromRuntime()

將此 Java 節點從互通執行時中取消註冊。

(繼承來源 Object)
UsingProxy()

顯示連線是否透過代理伺服器。

Wait()

導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。

(繼承來源 Object)
Wait(Int64, Int32)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

(繼承來源 Object)
Wait(Int64)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

(繼承來源 Object)

明確介面實作

名稱 Description
IJavaPeerable.Disposed()

一個支援 HTTP 特定功能的 URLConnection。

(繼承來源 JavaObject)
IJavaPeerable.Finalized()

一個支援 HTTP 特定功能的 URLConnection。

(繼承來源 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

一個支援 HTTP 特定功能的 URLConnection。

(繼承來源 JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

一個支援 HTTP 特定功能的 URLConnection。

(繼承來源 JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

一個支援 HTTP 特定功能的 URLConnection。

(繼承來源 JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

一個支援 HTTP 特定功能的 URLConnection。

(繼承來源 JavaObject)

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

一個支援 HTTP 特定功能的 URLConnection。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於