亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解決Java處理HTTP請求超時的問題

 更新時間:2021年03月29日 10:30:29   作者:曠野歷程  
這篇文章主要介紹了解決Java處理HTTP請求超時的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

在發(fā)送POST或GET請求時,返回超時異常處理辦法:

捕獲 SocketTimeoutException | ConnectTimeoutException | ConnectionPoolTimeout 異常

三種異常說明:

SocketTimeoutException:是Java包下拋出的異常,這定義了Socket讀數據的超時時間,即從server獲取響應數據須要等待的時間;當讀取或者接收Socket超時會拋出SocketTimeoutException。

ConnectTimeoutException:是Apache的HttpClient包拋出的超時異常,定義了通過網絡與server建立連接的超時時間,Httpclient包中通過一個異步線程去創(chuàng)建與server的socket連接,這就是該socket連接的超時時;

當連接HTTPserver或者等待HttpConnectionManager管理的一個有效連接超時出錯會拋出ConnectionTimeoutException。

ConnectionPoolTimeout:也是Apache的HttpClient包拋出的超時異常,定義了從 ConnectionManager 管理的連接池中取出連接的超時時間;出錯會拋出 ConnectionPoolTimeoutException。

總結:

SocketTimeoutException異常是一個通用的異常,無論是用原生的HTTP請求,還是用Apache下的HttpClient包,在拋出的異常中都需要捕獲 SocketTimeoutException 異常。

例:

public static String doGet(String url, Object params, String contentType) {
 try {
 return HttpUtils.doGetSend(url, params, contentType);
 } catch (SocketTimeoutException | ConnectTimeoutException e) {
 e.printStackTrace();
 System.out.println("請求連接超時:" + e.getMessage());
 } catch (IOException e) {
 e.printStackTrace();
 System.out.println("請求異常,異常信息:" + e.getMessage());
 } catch (Exception e) {
 e.printStackTrace();
 }
 return null;
}

補充:java 發(fā)送http請求(連接超時處理)

業(yè)務背景:

某項目跟第三方公司對接。

業(yè)務描述:

出于數據安全考慮,需要從服務器發(fā)送請求,來調用第三方公司提供的接口。但是該場景是銷售類型,響應時間必須夠快,那么就要設置響應的超時處理。

不然讓客戶看著圈圈在那里轉半天,誰買?

項目架構:

jdk1.7

spring4.2.9

詳細內容:

CloseableHttpClient httpclient = HttpClients.createDefault();
try {
  
 HttpPost httpPost = new HttpPost(要訪問的URL);
 //配置超時
 RequestConfig requestConfig = RequestConfig.custom()  
  .setConnectTimeout(5000).setConnectionRequestTimeout(5000)  
  .setSocketTimeout(5000).build();  
 httpPost.setConfig(requestConfig);
  
 //設置post請求參數
 List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 
 nvps.add(new BasicNameValuePair("attr1", 參數值1)); 
 nvps.add(new BasicNameValuePair("attr2", 參數值2));
 nvps.add(new BasicNameValuePair("attr3", 參數值3));
 …… 
 httpPost.setEntity(new UrlEncodedFormEntity(nvps)); 
  
 //執(zhí)行post請求
 CloseableHttpResponse response = httpclient.execute(httpPost);
  
 // 判斷網絡連接狀態(tài)碼是否正常(0--200都數正常)
      if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
        //獲取響應實體
       responseMessage = EntityUtils.toString(response.getEntity(),"utf-8");
        System.out.println(responseMessage);
        if(responseMessage!=null && !"".equals(responseMessage)){
         String data = new String(AESUtil.decrypt(Base64.decode(responseMessage), key),"UTF-8");
         
      String msg = translate_PRE(data,trans_type,transNo);
      result.put("msg", msg);
        }
        
      }else{
       System.out.println("請求未成功響應: "+ response.getStatusLine());
      
      }
 
 } catch (ConnectTimeoutException e) {
 System.out.println(api_type+"請求超時");
  
 } catch (ClientProtocolException e) {
 System.out.println("請求失敗");
 
 } catch (Exception e) {
 e.printStackTrace();
 
 } finally {
 //釋放連接
 try {
       if(httpclient!=null){
       httpclient.close();
       }
      } catch (IOException e) {
     System.out.println(api_type+"連接無法關閉");
      }
 }
 .setConnectTimeout(5000).setConnectionRequestTimeout(5000)  
  .setSocketTimeout(5000).build();  
 httpPost.setConfig(requestConfig);
  
 //設置post請求參數
 List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 
 nvps.add(new BasicNameValuePair("attr1", 參數值1)); 
 nvps.add(new BasicNameValuePair("attr2", 參數值2));
 nvps.add(new BasicNameValuePair("attr3", 參數值3));
 …… 
 httpPost.setEntity(new UrlEncodedFormEntity(nvps)); 
  
 //執(zhí)行post請求
 CloseableHttpResponse response = httpclient.execute(httpPost);
  
 // 判斷網絡連接狀態(tài)碼是否正常(0--200都數正常)
      if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
        //獲取響應實體
       responseMessage = EntityUtils.toString(response.getEntity(),"utf-8");
        System.out.println(responseMessage);
        if(responseMessage!=null && !"".equals(responseMessage)){
         String data = new String(AESUtil.decrypt(Base64.decode(responseMessage), key),"UTF-8");
         
      String msg = translate_PRE(data,trans_type,transNo);
      result.put("msg", msg);
        }
        
      }else{
       System.out.println("請求未成功響應: "+ response.getStatusLine());
      
      }
 
 } catch (ConnectTimeoutException e) {
 System.out.println(api_type+"請求超時");
  
 } catch (ClientProtocolException e) {
 System.out.println("請求失敗");
 
 } catch (Exception e) {
 e.printStackTrace();
 
 } finally {
 //釋放連接
 try {
       if(httpclient!=null){
       httpclient.close();
       }
      } catch (IOException e) {
     System.out.println(api_type+"連接無法關閉");
      }
 }
 

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關文章

  • Java數據結構之List的使用總結

    Java數據結構之List的使用總結

    List是Java中比較常用的集合類,指一系列存儲數據的接口和類,可以解決復雜的數據存儲問題,本文就來拿實際案例總結介紹一下List的使用方法,感興趣的朋友快來看看吧
    2021-11-11
  • Java獲取此次請求URL以及服務器根路徑的方法

    Java獲取此次請求URL以及服務器根路徑的方法

    這篇文章主要介紹了Java獲取此次請求URL以及服務器根路徑的方法,需要的朋友可以參考下
    2015-08-08
  • SpringBoot控制配置類加載順序方式

    SpringBoot控制配置類加載順序方式

    這篇文章主要介紹了SpringBoot控制配置類加載順序方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • mybatis?獲取更新(update)記錄的id之<selectKey>用法說明

    mybatis?獲取更新(update)記錄的id之<selectKey>用法說明

    這篇文章主要介紹了mybatis?獲取更新(update)記錄的id之<selectKey>用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java抽象類和接口使用梳理

    Java抽象類和接口使用梳理

    對于面向對象編程來說,抽象是它的一大特征之一,在?Java?中可以通過兩種形式來體現OOP的抽象:接口和抽象類,下面這篇文章主要給大家介紹了關于Java入門基礎之抽象類與接口的相關資料,需要的朋友可以參考下
    2022-02-02
  • Java面向對象基礎教學(三)

    Java面向對象基礎教學(三)

    這篇文章主要介紹了Java的面相對象編程思想,包括類對象方法和封裝繼承多態(tài)等各個方面的OOP基本要素,非常推薦,需要的朋友可以參考下,希望可以對你有所幫助
    2021-07-07
  • java URL 獲取PHP JSON 數據

    java URL 獲取PHP JSON 數據

    這篇文章主要介紹了java URL 獲取PHP JSON 數據,需要的朋友可以參考下
    2016-04-04
  • Mybatis批量插入更新xml方式和注解方式的方法實例

    Mybatis批量插入更新xml方式和注解方式的方法實例

    這篇文章主要給大家介紹了關于Mybatis批量插入更新xml方式和注解方式的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Mybatis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-12-12
  • springBoot項目打包idea的多種方法

    springBoot項目打包idea的多種方法

    這篇文章主要介紹了springBoot項目打包idea的多種方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • java實現抖音飛機大作戰(zhàn)

    java實現抖音飛機大作戰(zhàn)

    這篇文章主要為大家詳細介紹了java實現抖音飛機大作戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04

最新評論