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()。
 ?
總結
以上是生活随笔為你收集整理的URLConnection和HttpURLConnection类的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 基于YARN集群构建运行PySpark
- 下一篇: 第五届省赛(软件类)真题----Java
