配置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()。