HttpClient-4.5總結(jié)(1)

apache httpclient不多介紹這個(gè)工具是什么碱妆,具體請(qǐng)看官網(wǎng),不贅述蜘拉。

進(jìn)行記錄的原因一個(gè)是把掉過坑的地方記住嘹裂,另一個(gè)是自httpclient-4.4開始市框,官方對(duì)代碼進(jìn)行了很多調(diào)整疗隶,4.4以前的很多class和method都過時(shí)了佑笋,而國內(nèi)之前很多關(guān)于httpclient的分享都是4.4之前的。

個(gè)人感覺使用Httpclient比較重要的是看它的代碼抽减,和官方的一些例子允青,可能是網(wǎng)絡(luò)知識(shí)比較短板的原因,官方的tutorial其實(shí)看起來挺不清晰的卵沉,感覺主線不明確颠锉,不能引導(dǎo)你很好的學(xué)習(xí),建議初學(xué)的人同時(shí)結(jié)合官網(wǎng)史汗、源碼琼掠、官方例子、tutorial進(jìn)行學(xué)習(xí)停撞。

先看第一個(gè)demo瓷蛙,把這個(gè)東西用起來再說。

/**
 * 使用httpclient-4.5.2發(fā)送請(qǐng)求
 * @author chmod400
 * 2016.3.24
 */
public class FirstHttpClientDemo {

    public static void main(String[] args) {
        try {
            String url = "http://www.baidu.com";
            // 使用默認(rèn)配置創(chuàng)建httpclient的實(shí)例
            CloseableHttpClient client = HttpClients.createDefault();
            
            HttpPost post = new HttpPost(url);
//          HttpGet get = new HttpGet(url);
            
            CloseableHttpResponse response = client.execute(post);
//          CloseableHttpResponse response = client.execute(get);
            
            // 服務(wù)器返回碼
            int status_code = response.getStatusLine().getStatusCode();
            System.out.println("status_code = " + status_code);
            
            // 服務(wù)器返回內(nèi)容
            String respStr = null;
            HttpEntity entity = response.getEntity();
            if(entity != null) {
                respStr = EntityUtils.toString(entity, "UTF-8");
            }
            System.out.println("respStr = " + respStr);
            // 釋放資源
            EntityUtils.consume(entity);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

這個(gè)demo主要是完成基本的交互過程戈毒,發(fā)送請(qǐng)求艰猬,接收消息,如果只是做小程序或者不是特別大并發(fā)量的系統(tǒng)埋市,基本已經(jīng)夠用了冠桃。

進(jìn)行一些說明:

1.需要向服務(wù)器發(fā)送請(qǐng)求,我們需要一個(gè)org.apache.http.client.HttpClient的實(shí)例對(duì)象道宅,一般使用的都是org.apache.http.impl.client.CloseableHttpClient食听,創(chuàng)建該對(duì)象的最簡單方法是CloseableHttpClient client = HttpClients.createDefault();,HttpClients是負(fù)責(zé)創(chuàng)建CloseableHttpClient的工廠,現(xiàn)在我們用最簡單的方法就是使用默認(rèn)配置去創(chuàng)建實(shí)例污茵,后面我們再討論有參數(shù)定制需求的實(shí)例創(chuàng)建方法樱报。我們可以通過打斷點(diǎn)的方式看到這個(gè)默認(rèn)的實(shí)例對(duì)象的連接管理器org.apache.http.conn.HttpClientConnectionManager請(qǐng)求配置org.apache.http.client.config.RequestConfig等配置的默認(rèn)參數(shù)泞当,這些都是后面需要了解的迹蛤。

2.構(gòu)造請(qǐng)求方法HttpPost post = new HttpPost(url);表示我們希望用那種交互方法與服務(wù)器交互,HttpClient為每種交互方法都提供了一個(gè)類:HttpGet,
HttpHead, HttpPost, HttpPut, HttpDelete, HttpTrace, 還有 HttpOptions。

3.向服務(wù)器提交請(qǐng)求CloseableHttpResponse response = client.execute(post);笤受,很明顯`CloseableHttpResponse就是用了處理返回?cái)?shù)據(jù)的實(shí)體穷缤,通過它我們可以拿到返回的狀態(tài)碼、返回實(shí)體等等我們需要的東西箩兽。

4.EntityUtils是官方提供一個(gè)處理返回實(shí)體的工具類,toString方法負(fù)責(zé)將返回實(shí)體裝換為字符串章喉,官方是不太建議使用這個(gè)類的汗贫,除非返回?cái)?shù)據(jù)的服務(wù)器絕對(duì)可信和返回的內(nèi)容長度是有限的。官方建議是自己使用HttpEntity#getContent()或者HttpEntity#writeTo(OutputStream)秸脱,需要提醒的是記得關(guān)閉底層資源落包。

5.EntityUtils.consume(entity);負(fù)責(zé)釋放資源,通過源碼可知摊唇,是需要把底層的流關(guān)閉:

InputStream instream = entity.getContent();
if (instream != null) {
    instream.close();
}

好了咐蝇,到此已經(jīng)完成了httpclient的第一個(gè)demo。
jar包地址:Apache HttpClient 4.5.2巷查、Apache HttpCore 4.4

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末有序,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子岛请,更是在濱河造成了極大的恐慌旭寿,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崇败,死亡現(xiàn)場離奇詭異盅称,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)后室,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門缩膝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人岸霹,你說我怎么就攤上這事疾层。” “怎么了松申?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵云芦,是天一觀的道長。 經(jīng)常有香客問我贸桶,道長舅逸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任皇筛,我火速辦了婚禮琉历,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己旗笔,他們只是感情好彪置,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蝇恶,像睡著了一般拳魁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撮弧,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天潘懊,我揣著相機(jī)與錄音,去河邊找鬼贿衍。 笑死授舟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贸辈。 我是一名探鬼主播释树,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼擎淤!你這毒婦竟也來了奢啥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤揉燃,失蹤者是張志新(化名)和其女友劉穎扫尺,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炊汤,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡正驻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抢腐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姑曙。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖迈倍,靈堂內(nèi)的尸體忽然破棺而出伤靠,到底是詐尸還是另有隱情,我是刑警寧澤啼染,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布宴合,位于F島的核電站,受9級(jí)特大地震影響迹鹅,放射性物質(zhì)發(fā)生泄漏卦洽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一斜棚、第九天 我趴在偏房一處隱蔽的房頂上張望阀蒂。 院中可真熱鬧该窗,春花似錦、人聲如沸蚤霞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昧绣。三九已至规肴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間滞乙,已是汗流浹背奏纪。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斩启,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓醉锅,卻偏偏與公主長得像兔簇,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子硬耍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容