業務背景:
某項目跟第三方公司對接。
業務描述:
出於數據安全考慮,需要從服務器發送請求,來調用第三方公司提供的接口。但是該場景是銷售類型,響應時間必須夠快,那麼就要設置響應的超時處理。
不然讓客戶看着圈圈在那裏轉半天,誰買?
項目架構:
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+"連接無法關閉");
}
}