溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用apache的HttpClient進(jìn)行http通訊

發(fā)布時(shí)間:2021-09-17 15:24:26 來(lái)源:億速云 閱讀:139 作者:chen 欄目:MongoDB數(shù)據(jù)庫(kù)

這篇文章主要講解了“如何使用apache的HttpClient進(jìn)行http通訊”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“如何使用apache的HttpClient進(jìn)行http通訊”吧!

我們用apache的HttpClient這個(gè)庫(kù)消費(fèi)云端的Restful API時(shí),一般都需要兩次HTTP調(diào)用,第一次獲得某種token,比如獲取防止跨域請(qǐng)求偽造攻擊Cross-site request forgery - CSRF的token,或者比如微信API的access token,第二次再進(jìn)行真正的API消費(fèi)。

通常情況下,第一次請(qǐng)求完畢后,服務(wù)器都會(huì)給客戶端返回一些cookie字段,在第二次請(qǐng)求時(shí),如果使用的是postman測(cè)試工具或者apache的HttpClient這個(gè)庫(kù),cookie字段都會(huì)自動(dòng)被附加在第二次請(qǐng)求的HTTP頭部。詳情可以參考我寫的另一篇博客:OData service parallel performance measurement – how to deal with XSRF token in Java Program and JMeter

https://blogs.sap.com/2017/08/28/odata-service-parallele-performance-measurement-how-to-deal-with-xsrf-token-in-java-program-and-jmeter/

本文就來(lái)介紹apache的HttpClient,在發(fā)送第二個(gè)Http請(qǐng)求時(shí),是如何自動(dòng)插入從第一個(gè)請(qǐng)求獲得的服務(wù)器頒發(fā)的cookie的。

首先進(jìn)入HttpClient的單步調(diào)試:InternalHttpClient.doExecute方法:

如何使用apache的HttpClient進(jìn)行http通訊

第85行的origheaders,即取出程序員在代碼里指定的http請(qǐng)求頭部字段,比如basic Authentication,content-type,token等等:

如何使用apache的HttpClient進(jìn)行http通訊

這個(gè)cookie是什么時(shí)候傳進(jìn)來(lái)的?

如何使用apache的HttpClient進(jìn)行http通訊

看來(lái)我們必須進(jìn)入httpcore-4.4.3.jar這個(gè)apache HttpClient的實(shí)現(xiàn)里去調(diào)試。

如何使用apache的HttpClient進(jìn)行http通訊

經(jīng)過(guò)觀察發(fā)現(xiàn),一旦我執(zhí)行完204行的conn.sendRequestHeader方法,就能觀察到Cookie被自動(dòng)設(shè)置了,所以?shī)W妙就在第204行里。

如何使用apache的HttpClient進(jìn)行http通訊

自動(dòng)添加Content-Length頭部字段:

如何使用apache的HttpClient進(jìn)行http通訊

由此可見(jiàn)Content-length是通過(guò)方法entity.getContentLength()自動(dòng)計(jì)算出來(lái)的,因此我們程序員不必在自己的應(yīng)用代碼里重復(fù)這個(gè)計(jì)算動(dòng)作。

如何使用apache的HttpClient進(jìn)行http通訊

自動(dòng)加入host字段:

如何使用apache的HttpClient進(jìn)行http通訊

自動(dòng)加入Connection: Keep-Alive

如何使用apache的HttpClient進(jìn)行http通訊

UserAgent的自動(dòng)填充:Apache-HttpClient/4.5.1, 這個(gè)也不用程序員操心。

如何使用apache的HttpClient進(jìn)行http通訊

終于到了我要找的RequestAddCookies這個(gè)HTTPRequestInterceptor了。光從這個(gè)類的字面意思就能猜到它和HTTP請(qǐng)求的Cookie有關(guān)。

如何使用apache的HttpClient進(jìn)行http通訊

新建一個(gè)Cookie,這個(gè)CookieOrigin構(gòu)造函數(shù)里的hpst,path和secure標(biāo)志位都是Chrome開(kāi)發(fā)者工具的Cookie標(biāo)簽頁(yè)里能看到。

如何使用apache的HttpClient進(jìn)行http通訊

從 Cookie Store里取出前一次請(qǐng)求中由服務(wù)器返回的Cookie:

如何使用apache的HttpClient進(jìn)行http通訊

如何使用apache的HttpClient進(jìn)行http通訊

如何使用apache的HttpClient進(jìn)行http通訊

這里把Cookie store里的cookie加到第二個(gè)請(qǐng)求的頭部字段,謎底就這樣解開(kāi)了。

如何使用apache的HttpClient進(jìn)行http通訊

感謝各位的閱讀,以上就是“如何使用apache的HttpClient進(jìn)行http通訊”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)如何使用apache的HttpClient進(jìn)行http通訊這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI