URLConnection和HttpURLConnection類

配置URLConnection

在實際建立連接之前,我們可以配置影響客戶端和服務器之間正在進行的通信的各個方面,例如超時,緩存,HTTP請求方法等。

該URLConnection的類提供了配置連接下面的方法:

    setConnectTimeout(int timeout):設置連接超時(以毫秒爲單位)。一個java.net.SocketTimeoutException如果超時可以建立連接之前被拋出。超時爲零表示無限超時(默認值)。

    setReadTimeout(int timeout):設置讀取超時(以毫秒爲單位)。超時到期後,沒有可用於從連接的輸入流中讀取的數據,將引發SocketTimeoutException。超時爲零表示無限超時(默認值)。

    setDefaultUseCaches(boolean default):設置URLConnection是否默認使用緩存(默認爲true)。此方法會影響URLConnection類的未來實例。

    setUseCaches(boolean useCaches):設置此連接是否使用緩存(默認爲true)。

    setDoInput(boolean doInput):設置此URLConnection是否可用於從服務器讀取內容(默認爲true)。

    setDoOutput(boolean doOutput):設置是否可以使用此URLConnection將數據發送到服務器(默認爲false)。

    setIfModifiedSince(long time):設置客戶端檢索的內容的最後修改時間,主要用於HTTP協議。例如,如果服務器發現內容自指定時間以來沒有改變,則它不獲取內容並返回狀態代碼304-未修改。如果客戶端的修改時間超過了指定時間,則客戶端將獲得新鮮內容。

    setAllowUserInteraction(boolean allow):啓用或禁用用戶交互,例如,如果需要,彈出一個身份驗證對話框(默認爲false)。

    setDefaultAllowUserInteraction(boolean default):爲所有未來的URLConnection對象設置用戶交互的默認值。

    setRequestProperty(String key,String value):設置由key = value對指定的常規請求屬性。如果具有密鑰的屬性已存在,則舊值將被新值覆蓋。

請注意,應在建立連接之前調用這些方法。如果已建立連接,則某些方法會拋出IllegalStateException。

此外,子類HttpURLConnection提供了以下用於使用HTTP特定功能配置連接的方法

    setRequestMethod(String method):設置URL請求的方法,它是HTTP方法GET,POST,HEAD,OPTIONS,PUT,DELETE和TRACE之一。默認方法是GET(注意:這裏方法類型必須大寫)。

    setChunkedStreamingMode(int chunkLength):當高級內容未知內容長度時,啓用HTTP請求主體的流式傳輸而不進行內部緩衝。

    setFixedLengthStreamingMode(long contentLength):當高級已知內容長度時,啓用HTTP請求主體的流式傳輸而不進行內部緩衝。

    setFollowRedirects(boolean follow):此靜態方法設置是否應該由此類的未來對象自動跟隨HTTP重定向(默認爲true)。

    setInstanceFollowRedirects(boolean follow):設置HTTP重定向是否應該自動跟隨此HttpURLConnection類的實例(默認爲true)。

 
閱讀標題字段

建立連接後,服務器將處理URL請求併發回包含元數據和實際內容的響應。元數據是key = value對的集合,稱爲標題字段。

標題字段顯示有關服務器,狀態代碼,協議信息等的信息。實際內容可以是文本,HTML,圖像等,具體取決於文檔的類型。

所述的URLConnection類提供用於讀取頭字段下面的方法:

 

    getHeaderFields():返回包含所有標題字段的映射。鍵是字段名稱,值是String列表,表示相應的字段值。

    getHeaderField(int n):讀取第n個頭字段的值。

    getHeaderField(String name):讀取指定頭字段的值。

    getHeaderFieldKey(int n):讀取第n個頭字段的鍵。

    getHeaderFieldDate(String name,long default):讀取解析爲Date的命名字段的值。如果字段丟失或值格式錯誤,則返回默認值。

    getHeaderFieldInt(String name,int default):讀取被解析爲整數的命名字段的值。如果字段丟失或值格式錯誤,則返回默認值。

    getHeaderFieldLong(String name,long default):讀取被解析爲長數字的命名字段的值。如果字段丟失或值格式錯誤,則返回默認值。

這些是讀取任何標題字段的一般方法。對於一些經常訪問的頭字段,URLConnection類提供了更具體的方法:

    getContentEncoding():讀取內容編碼頭字段的值,該字段指示內容的編碼類型。

    getContentLength():讀取content-length頭字段的值,該字段指示內容的大小(以字節爲單位)。

    getContentType():讀取content-type頭字段的值,該字段指示內容的類型。

    getDate():讀取日期標題字段的值,該字段指示服務器上的日期時間。

    getExpiration():讀取expires頭字段的值,指示響應被視爲過時的時間。這是用於緩存控制。

    getLastModified():讀取上次修改的頭字段的值,該字段指示內容的上次​​修改時間。

子類HttpURLConnection提供了另一種方法:

    getResponseCode():返回服務器發送的HTTP狀態碼。

請注意,讀取頭字段時,將隱式建立連接,而不調用connect()。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章