HttpClient_入門學習(二)
阿新 • • 發佈:2018-11-06
RESPONSE HANDLER:
HttpClient提供了一個處理http響應的方法,就是使用ResponseHandle這個介面,這個介面中有handlerResponse(HttpResponse),使用這個介面,可以不用關心Http連線管理器,無論請求失敗還是異常,http都會將請求釋放給Http管理器,
HttpClient介面:
對與http請求執行過程來說,HttpClient介面對於http請求有著重要的作用,http並沒有對http請求的過程,我的理解就是,HttpClient其實就是一個特殊的handler處理類,這個handler處理類處理著Http某一方面的
東西,比如 重定向,認證處理,有關永續性連線和keyAlive持續時間的決策,這樣我們就可以使用一些引數來代替這
些預設的引數,從而實現各種功能....
public void test_keepAlive(){
ConnectionKeepAliveStrategy strategy = new DefaultConnectionKeepAliveStrategy(){
@Override
public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
long keepAlive = super.getKeepAliveDuration(response, context);
if(keepAlive == -1){
keepAlive = 5000;
}
return keepAlive;
}
};
CloseableHttpClient httpClient = HttpClients.custom().setKeepAliveStrategy(strategy).build();
}
HttpClient的安全性: HttpClient已經實現了執行緒安全,所以希望使用者在建立httpClient例項時,也要支援多個請求的使用
HttpClient的記憶體分配
當CloseableHttpClient的例項不再被使用,或者它的作用範圍即將失效,和它相關的連線必須被關閉,關閉它的方法為 close
Http執行上下文:
起初,http被設計成無狀態的, 請求 --- 響應 ,然而,在實際中,我們想要在一些邏輯相關的請求,|響應中儲存一些狀態資訊,HttpClient允許http連線在特定http上下文中執行,如果在持續的http請求中使用了同樣的上下文,那麼這個http將會被分配到一個
邏輯會話中,http上下文就類似於一個Map<String,Object>,它實際上就是任意值的集合,應用程式可以在http前填充上下文中的值, 也可以在請求執行後檢查上下文,,,,,,,, HttpContent可以包含任意的物件,因次在多執行緒中並不安全,所以推薦每個執行緒都包含自己的上下文,Http在執行中,HttpClient會
自動封裝以下屬性到上下文中,
我們通常使用HttpClientContent來簡化 上下文互動的過程
同一個會話中多個Http請求,我們應該使用同一個上下文,這樣就會自動的在Http請求中傳遞狀態和資訊,下面是我在網上找的一個 的一個例子,在開頭設定了引數,會被儲存在上下文中,然後會應用到後續的http請求中
異常處理 :
HttpClient會丟擲倆種異常,一種是IOException(sock超時,或者sock被重置),這種異常我們認為是可修復的, HttpException(表示Http失敗,請求協議錯誤),這種異常是不可修復的......
Http傳輸安全問題 :
應用程式需要處理同一方法多次執行造成的影響,新增一個唯一性的id即可,問題 解決,我們需要明白,並不是HttpClient才會出現這樣的情況. 其它瀏覽器應用也會遇到 方法冪不等的情況,
就講那麼多啦,,,哈哈哈哈,撤退啦