1. 程式人生 > >HttpClient_入門學習(二)

HttpClient_入門學習(二)

 

 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才會出現這樣的情況. 其它瀏覽器應用也會遇到 方法冪不等的情況,




   就講那麼多啦,,,哈哈哈哈,撤退啦