【计算机网络】详解HttpURLConnection
請求響應流程
設置連接參數的方法
?
?
- setAllowUserInteraction
- setDoInput
- setDoOutput
- setIfModifiedSince
- setUseCaches
- setDefaultAllowUserInteraction
- setDefaultUseCaches
?
?
設置請求頭或響應頭
HTTP請求允許一個key帶多個用逗號分開的values,但是HttpURLConnection只提供了單個操作的方法:
?
- setRequestProperty(key,value)
- addRequestProperty(key,value)
?
setRequestProperty和addRequestProperty的區別就是,setRequestProperty會覆蓋已經存在的key的所有values,有清零重新賦值的作用。而addRequestProperty則是在原來key的基礎上繼續添加其他value。
?
發送URL請求
?
建立實際連接之后,就是發送請求,把請求參數傳到服務器,這就需要使用outputStream把請求參數傳給服務器:
?
- getOutputStream?
?
獲取響應
請求發送成功之后,即可獲取響應的狀態碼,如果成功既可以讀取響應中的數據,獲取這些數據的方法包括:
?
?
- getContent
- getHeaderField
- getInputStream?
?
?
對于大部分請求來說,getInputStream和getContent是用的最多的。
相應的信息頭用以下方法獲取:
?
?
?
- getContentEncoding
- getContentLength
- getContentType
- getDate
- getExpiration
- getLastModifed?
?
?
HttpURLConnection
任何網絡連接都需要經過socket才能連接,HttpURLConnection不需要設置socket,所以,HttpURLConnection并不是底層的連接,而是在底層連接上的一個請求。這就是為什么HttpURLConneciton只是一個抽象類,自身不能被實例化的原因。HttpURLConnection只能通過URL.openConnection()方法創建具體的實例。
雖然底層的網絡連接可以被多個HttpURLConnection實例共享,但每一個HttpURLConnection實例只能發送一個請求。請求結束之后,應該調用HttpURLConnection實例的InputStream或OutputStream的close()方法以釋放請求的網絡資源,不過這種方式對于持久化連接沒用。對于持久化連接,得用disconnect()方法關閉底層連接的socket。
?
創建HttpURLConnection
?
[java]?view plaincopy?
設置HttpURLConnection參數
?
[java]?view plaincopy?
URLConnection建立連接
[java]?view plaincopy?
HttpURLConnection發送請求
?
[java]?view plaincopy?
HttpURLConneciton獲取響應
?//?調用HttpURLConnection連接對象的getInputStream()函數,??
InputStream?inStrm?=?httpConn.getInputStream();?
設置POST參數
?
[java]?view plaincopy?
超時設置,防止?網絡異常的情況下,可能會導致程序僵死而不繼續往下執行
?
System.setProperty("sun.net.client.defaultConnectTimeout",?"30000"); ?
System.setProperty("sun.net.client.defaultReadTimeout",?"30000"); ?
?
其中:?sun.net.client.defaultConnectTimeout:連接主機的超時時間(單位:毫秒)??
sun.net.client.defaultReadTimeout:從主機讀取數據的超時時間(單位:毫秒)??
??
JDK?1.5以前的版本,只能通過設置這兩個系統屬性來控制網絡超時。在1.5中,還可以使用HttpURLConnection的父類URLConnection的以下兩個方法:??
setConnectTimeout:設置連接主機超時(單位:毫秒)??
setReadTimeout:設置從主機讀取數據超時(單位:毫秒)??
??
例如:??
HttpURLConnection?urlCon?=?(HttpURLConnection)url.openConnection();??
urlCon.setConnectTimeout(30000);??
urlCon.setReadTimeout(30000); ?
轉載于:https://www.cnblogs.com/qiuxiangmuyu/p/7018772.html
總結
以上是生活随笔為你收集整理的【计算机网络】详解HttpURLConnection的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Spring MVC 向前台页面传值-M
- 下一篇: MyBaties异常之 ORA-0091
