HttpClient_入門學習(一)
HttpClient 是 ApacheJakarta Common 下的子專案,可以用來提供高效的、最新的、功能豐富的支援 HTTP 協 議的客戶端程式設計工具包(jar包),並且它支援 HTTP 協議最新的版本和建議。
HttpClient主要的功能:
1.實現了所有http方法(get,post,put,delete)等等....
2. 支援自動轉向
3.支援代理伺服器等
4.支援https協議等
但是,HttpClient並沒有眼中的那麼好,HttpClient的維護人員並不積極,因為api數量過多,很難在不破壞相容的情況 下更新迭代,HttpClient的備胎已經出現了,(HttpURLConnect)
谷歌人員給出的原因如下
1.上面我們講了,因為相容性性問題
2.HttpURLConnect的api包很小,更適合安卓
不過我們不能因為過時了就不學習了,既然來了就看完再走把....
我在網上找了案例,和一些資料,為了能夠更好的學習........
HttpClient提供了URLBuilder類來簡化url的建立 | 修改的過程.......
我們還是來寫把,感覺這樣的話印象會深刻一點,
1.建立一個maven工程
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
使用builder建立uri程式碼如下
控制檯會輸出如下:
系統接收到http請請求的時候,就會進行解析,然後進行響應,然後這個響應就是HTTP response.HTTP,響應的第一行是協議版本,
然後是狀態碼以及文字,
輸出結果如下
訊息頭
一個Http請求包含一系列訊息頭,用來對訊息進行描述,比如訊息長度,訊息型別等,HttpClient提供了獲取請求,新增,移除,
列舉訊息頭等....
推薦的獲取指定訊息的請求頭的方式是使用HeaderIterator
控制檯會列印 :
確保底層資源被釋放
這裡需要說明一下,關閉http內容流跟http響應流的區別在於.前者通過消耗http內容流來保持連線,後者會立即關閉,丟棄
http連線.
當然也有這種情況,這是需要注意的.我們只需要獲取響應頭的一小部分東西,但是我們需要獲取整個內容,並實現連結的重複性代價太大,
我們可以通過關閉響應的方式來關閉內容的輸入輸出流.
以上程式碼後,連線變得不可用,所有的資源都被釋放.................
HttpClient推薦我們使用,HttpEntity的getContent方法來獲取內容,或使用HttpEntity的writeTo方法來消耗掉實體內容,
HtttpClient也提供了EntityUtils類來讀取,這個類提供了靜態方法可以更容易的讀取http內容,當時並不推薦使用,除非網站是可,
信任的,並且內容長度不大,官方給了以下例子........
有些情況下,我們需要持久化資料,為了重複使用,這時我們應該把HttpEntity轉換成BufferedHttpClient();
HTML表單
很多應用程式都需要模擬提交表單這個過程,咋們爵個栗子,登陸一個網站或者將資料提交給伺服器,,,,,HttpClient就提供了一個 類 來幫忙我們實現這一例子,HttpClient會對我們的編碼格式進行編碼,編碼內容如下
username=zs&password=123
內容分塊