HttpClient幫助文檔總結

文章內容

1.HttpClient的主要對象
2.HttpClient特性和機制


1.HttpClient的主要對象

1.1.URI(資源定位)
URI用來定位請求的資源的位置,URI的組成爲:

[scheme:][//host:port][path][?query][#fragment]

在HttpClient中通過構造者模式創建URI;

1.2.HTTP request(Http請求)
HttpClient支持Http/1.1標準,支持所有方法:GET , HEAD , POST , PUT , DELETE , TRACE, OPTIONS,對應的實現類爲HttpGet、HttpHead…

1.3.HTTP response(Http請求)
HttpClient請求返回的對象,包含響應的所有內容:Http響應的頭部信息和數據實體;

1.4.Request execution(請求執行)
HTTP request請求對象通過執行execute方法返回HTTP response對象;

CloseableHttpResponse response = httpclient.execute(httpget);

1.5.HTTP entity(HTTP 實體)
HTTP entity一般由實體頭域和實體組成,實體頭域包含Content-Encoding、Content-Length等實體頭;HTTP request和HTTP response都可以附加entity,內容可以是字符串、文件或者是動態的內容;可通過關閉HTTP response或者entity自身來釋放底層資源;

entity分爲三種:streamed(一次讀寫), self-contained(從內存中讀取,可重複)、wrapping(從其他entity封裝);

1.6.TTP execution context(HTTP上下文)
原生的HTTP被設計成無狀態的,但是對於一些需要維護請求狀態的連接(如TLS),則無法勝任;

1.7.Response handlers(響應處理)
在獲取到響應數據後調用,用於對返回的數據進行處理;

MyJsonObject myjson = client.execute(httpget, rh);

1.8.HTTP protocol interceptors(HTTP協議攔截器)
在數據被髮送到服務器之前調用,用於對請求數據進行處理,特別是對於持續的HTTP請求很有效;

CloseableHttpClient httpclient = HttpClients.custom()
    .addInterceptorLast(new HttpRequestInterceptor() {
    public void process(
    final HttpRequest request,
    final HttpContext context) throws HttpException, IOException {
    AtomicInteger count = (AtomicInteger) context.getAttribute("count");
    request.addHeader("Count", Integer.toString(count.getAndIncrement()));
    }
})
.build();

1.9.Exception(異常)
HttpClient主要有兩類異常:IOException和HttpException

IOException:主要是數據傳輸層面的錯誤
HttpException:協議層面的錯誤

HttpException是IOException的子類,HttpClient會嘗試恢復I/O上的異常,卻不會恢復HttpException;

1.10. Request retry handler(請求重發處理)
如果出現異常,可通過 Request retry handler對可能的異常原因進行恢復;可以使用StandardHttpRequestRetryHandler來代替默認的handler,這些方法包括:GET , HEAD , PUT , DELETE , OPTIONS 和 TRACE

1.11.Redirect handling(處理重定向)
HttpClient可以自動處理各種重定向,除了HTTP協議標準中禁止的重定向方式,比如狀態碼303,按標準必須轉換成GET方式,但是可以通過自定義重定向策略來適應不同情況;

LaxRedirectStrategy redirectStrategy = new LaxRedirectStrategy();
CloseableHttpClient httpclient = HttpClients.custom()
                        .setRedirectStrategy(redirectStrategy)
                        .build();

1.12.HTTP cookies(HTTP緩存)
cookies用於保存服務器和客戶端之間會話相關的token和短信息;HttpClient實現了cookies相關的操作;cookies的不同標準和策略;


2.HttpClient特性和機制

2.1.HttpClient是線程安全的
HttpClient可以可重複用於HTTP請求,而不需要爲每一個HTTP請求創建一個HttpClient;

2.2.HttpClient資源必須釋放
當HttpClient不再使用,需要調用其close方法釋放內存資源;

2.3.HttpClient連接管理器
連接管理類似於線程池的作用,用於減少連接的建立,節省系統資源;管理器關閉,其中的alive連接都將被關閉;

* 2.3.1.Simple connection manager(簡單連接管理器)*
同一時間值維持一個連接,只能被一個線程使用(即使是線程安全的)

* 2.3.2.Simple connection manager(池連接管理)*
同一時間值維持數個連接,同時爲多個線程提供服務;對於已經維持的連接可提供給其他線程使用,不需要重新創建新的連接;在每個線路對應的連接數和總共的連接數都有限制,默認分別是2個和20個;不過可以進行配置;


2.4.與連接管理器相關的機制和策略

2.4.1.Connection eviction policy(連接回收策略)

2.4.2.Connection keep alive strategy(連接保活策略)

2.4.3.Connection socket factories(Socket連接工廠)


2.5.其他內容

2.5.1.HttpCient實現了與Http協議相關的網絡安全認證協議

2.5.2.Callbacks(異步請求)
當請求完成好時,調用MyCallback對應的方法,實現Http異步請求;

private final class MyCallback implements FutureCallback<Boolean> {
public void failed(final Exception ex) {
// do something
}
public void completed(final Boolean result) {
// do something
}
public void cancelled() {
// do something
}
}
HttpRequestFutureTask<Boolean> task = futureRequestExecutionService.execute(
new HttpGet("http://www.google.com"), HttpClientContext.create(),
new OkidokiHandler(), new MyCallback());

HttpCLient在線文檔

HttpClient文檔PDF下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章