HttpClient4 x的一些使用

2021-06-20 15:52:34 字數 3174 閱讀 4823

首先httpclient

client

=new

httpclient();這個寫法只在3.x的版本中可以使用,4.x以後都是defaulthttpclient();網上找**注意版本問題。

apache真是偉大,為我們提供了httpclient.jar,這個httpclient是客戶端的http通訊實現庫,這個類庫的作用是接受和傳送http報文,引進這個類庫,我們對於http的操作會變得簡單一些,事不宜遲,趕快介紹。

在將這個httpclient之前,我們必須弄清兩個概念:url和uri

uri(universal resource identify),通用資源識別符號,而url(uniform resource locator),統一資源定位符,兩個有什麼區別,其實就是範圍大小的問題,uri是包含url的,uri由訪問資源的命名機制、存放資源的主機名、資源自身的路徑組成,而url由協議、資源的主機ip位址、主機資源的具體位址組成,有他們兩個的組成我們可以清楚的看出,其實url就是我們平時輸入瀏覽器的位址,如「是uri的具體表現形式而已,uri是包含url的。

下面正式學習httpclient:

我講解的這個httpclient版本是4.0以上的,如果要執行我的**的話就要引用4.0以上的jar包。

1.建立乙個客戶端,使用httpclient,用它來處理與http相關的操作,我們可以理解為建立乙個瀏覽器那樣:

httpclient httpclient = new defaulthttpclient();
2.建立乙個httpget類,相當於與在瀏覽器中開啟乙個url,該類的構造接受乙個string型別的引數,就是我們要輸入的url了:

httpget httpget = new httpget("");
3.通過httpclient的execute方法,引數為httpget型別的引數,相當於打進**後回車,這個我們可以得到httpresponse,這個是代表請求後對應的響應:

httpresponse response = httpclient.execute(httpget);
4.通過這個response我們可以拿到乙個httpentity類的實體,這個實體裡面有著http報文的許多資訊,當然包括我們想要的內容:

httpentity entity = response.getentity();
5.通過entity這個實體,我們可以呼叫它的getcontent方法,拿到的就是網頁的內容,但這個內容是inputstream,不過有了inputstearm,什麼都好辦了:

inputstream instream = entity.getcontent();
下面我們來看看乙個完整的抓取www.hao123.com內容的例項:

@test

public

void testget() throws

exception }}

下面具體一點來介紹:

1.http請求

httpclient支援所有定義在http/1.1版本中的的方法:get、post、head、put、delete、trace和options,對應每個方法都有乙個類:httpget、httppost、httphead、httpput、httpdelete、httptrace和httpoptions

上面這些方法類中,除了可以有string引數的構造方法外,還有乙個uri引數的構造方法,通過這個uri就發出請求,這個uri類其實我們jdk自帶的,但是apache真是為我們著想,提供了uriutils類幫助我們,有興趣可以去了解一下。

2.http響應

httpresponse是httpclient提供給我們的響應類,響應是伺服器發給客戶端的報文,報文中包含了各種資訊,通過下列方法我們可以拿到這些資訊:

getprotocolversion():返回報文的協議版本

getstatusline():返回響應報文的第一行內容

getstatusline().getstatuscode():返回報文的狀態碼

示例:

@test

public

void

testresponsemethod()

3.http報文頭部:

乙個http報文頭部可以包含很多資訊,如內容的長度、內容的型別等等各種各樣的資訊。httpresponse有著很多方法處理頭部的資訊:

addheader(string name, string value):增加乙個頭部資訊,乙個key,乙個value

getfirstheader(string name):拿到第乙個header

getlastheader(string name):拿到最後乙個header

getheads(string name):拿到乙個head陣列

headeriterator(string name):拿到乙個陣列的迭代器

不僅如此,通過headerelementiterator我們還可以迭代出裡面value的資訊,看示例:

@test

public

void

testheadmethod()

}

4.http實體

實體是響應請求成功傳送到客戶端時建立的,通過entity我們可以拿到很多資訊,看看下面的方法:

getcontent():這個拿到響應的內容,前面我們就用過了

getcontenttype():拿到content的型別資訊

getcontentlength():拿到content的長度

通過entityutils類我們可以更加方法的拿到一些資訊,看下面:

@test

public

void testentitymethod() throws

exception

5.http狀態碼

狀態碼描述200    

請求成功

201請求完成,結果是建立了新資源

202  

請求被接受,但處理還沒完成

204伺服器已經完成了請求,但是沒有返回新的資訊

300存在多個可用的被請求資源

301請求道的資源都會分配乙個永久的url

302請求道的資源放在乙個不同的url中臨時儲存

304請求的資源未更新

400  

非法請求

401未授權

403  

禁止404  

找不到頁面

HttpClient 4 X 保持登入

session的保持是通過cookie來維持的,所以如果使用者有勾選x天內免登入,這個session 就x天內一直有效,就是通過這個cookie來維護。如果沒選x天內免登入,基本上就本次才能保持session,下次開啟瀏覽器就要重新登入了。所以在web安全裡,黑客通過xss,最終目的就是獲取cook...

HttpClient4 X和3 X傳送資料

首先需要說明,httpclient4.x支援jdk1.5及以上,httpclient3.x支援1.5以下的。4.x和3.x的區別在於4.x的httpclient是乙個介面,3.x的httpclient是乙個類,4.x更多的是基於介面的實現方式。4.x需要jar httpclient 4.5.3.ja...

pandas的一些操作4

temp i.split for i in 租入 固定資產 增值稅 資管 資產管理 增值稅 貼現 r for i in temp r i r 租入 固定資產 增值稅 資管 資產管理 增值稅 貼現 ll 租入 固定資產 增值稅 資管 資產管理 增值稅 貼現 cl x for x in ll if x ...