java 發送http請求(連接超時處理)

業務背景:

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

業務描述:

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

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

項目架構:

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));  
			
	//執行post請求
	CloseableHttpResponse response = httpclient.execute(httpPost);
			
	// 判斷網絡連接狀態碼是否正常(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));  
			
	//執行post請求
	CloseableHttpResponse response = httpclient.execute(httpPost);
			
	// 判斷網絡連接狀態碼是否正常(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+"連接無法關閉");
	           }
	}

 

 

 

 

 

 

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