首先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():返回報文的狀態碼
示例:
@test3.http報文頭部:public
void
testresponsemethod()
乙個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的資訊,看示例:
@test4.http實體public
void
testheadmethod()
}
實體是響應請求成功傳送到客戶端時建立的,通過entity我們可以拿到很多資訊,看看下面的方法:
getcontent():這個拿到響應的內容,前面我們就用過了
getcontenttype():拿到content的型別資訊
getcontentlength():拿到content的長度
通過entityutils類我們可以更加方法的拿到一些資訊,看下面:
@test5.http狀態碼public
void testentitymethod() throws
exception
狀態碼描述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 ...