歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Httpclient4.4之原理(Http執行上下文)

Httpclient4.4之原理(Http執行上下文)

日期:2017/3/1 9:29:05   编辑:Linux編程

最初HTTP被設計為無狀態的。然而,真實的應用中常常要能夠通過幾個邏輯相關的請求/響應保持狀態信息。為了使應用程序能夠保持一個處理狀態,HttpClient允許HTTP請求在特定的執行上下文內執行,稱為HTTP上下文。如果相同的上下文在連續的請求之間重用,多個邏輯相關的連續請求可以參與一個邏輯會話。HTTP上下文的功能類似於java.util.Map<String,Object>,它只不過是任意命名的值的集合。應用程序能在請求執行之前填充上下文屬性,也能在請求執行完成之後檢查上下文。

HttpContext能包含任意對象,因此,可能不是線程安全的。建議每個執行線程維護自己的上下文。

在HTTP請求執行的過程中,HttpClient添加以下屬性到執行上下文:

  • HttpConnection:它代表連接到目標服務器的實際連接。
  • HttpHost:它代表連接目標。
  • HttpRoute:它代表一個完整的連接路由。
  • HttpRequest:它代表一個真實的HTTP請求。在上下文中的最後的HttpRequest對象總是代表一個精確的消息狀態被發送到目標服務器。默認的HTTP1.0和HTTP1.1使用相對的請求URI,然而請求是在非隧道模式中通過代理發送的,那麼它是絕對URI。
  • HttpResponse:它代表當前的HTTP響應。
  • java.lang.Boolean:它代表一個標志,標識當前請求是否已經被完全傳送到連接目標。
  • RequestConfig:它代表當前請求的配置。
  • java.util.List:它代表在請求執行過程中接收到的所有重定向地址的集合。

我們可以使用HttpClientContext適配器類來簡化與上下文狀態之間的相互作用:

HttpContext context = <...>
HttpClientContext clientContext = HttpClientContext.adapt(context);
HttpHost target = clientContext.getTargetHost();
HttpRequest request = clientContext.getRequest();
HttpResponse response = clientContext.getResponse();
RequestConfig config = clientContext.getRequestConfig();

代表一個邏輯相關會話的多請求序列應執行在同一個HttpContext實體中,確保會話上下文與狀態信息在請求間自動傳播(示例銜接上面的示例):

CloseableHttpClient httpclient = HttpClients.createDefault();
RequestConfig requestConfig = RequestConfig.custom().
setSocketTimeout(1000).setConnectTimeout(1000).build();
HttpGet httpget1 = new HttpGet("http://localhost/1");
httpget1.setConfig(requestConfig);
//context上個示例中定義了
CloseableHttpResponse response1 = httpclient.execute(httpget1, context);
try {
HttpEntity entity1 = response1.getEntity();
} finally {
response1.close();
}
HttpGet httpget2 = new HttpGet("http://localhost/2");
CloseableHttpResponse response2 = httpclient.execute(httpget2, context);
try {
HttpEntity entity2 = response2.getEntity();
} finally {
response2.close();
}

使用HttpClient實現文件的上傳下載 http://www.linuxidc.com/Linux/2014-07/104303.htm

Android 實現 HttpClient 請求Https http://www.linuxidc.com/Linux/2014-05/102306.htm

Android使用HttpClient下載圖片 http://www.linuxidc.com/Linux/2014-05/101855.htm

HttpClient使用詳解 http://www.linuxidc.com/Linux/2014-08/104945.htm

Copyright © Linux教程網 All Rights Reserved