国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

解決Java處理HTTP請(qǐng)求超時(shí)的問題

瀏覽:5日期:2022-08-15 09:30:29
在發(fā)送POST或GET請(qǐng)求時(shí),返回超時(shí)異常處理辦法:

捕獲 SocketTimeoutException | ConnectTimeoutException | ConnectionPoolTimeout 異常

三種異常說(shuō)明:

SocketTimeoutException:是Java包下拋出的異常,這定義了Socket讀數(shù)據(jù)的超時(shí)時(shí)間,即從server獲取響應(yīng)數(shù)據(jù)須要等待的時(shí)間;當(dāng)讀取或者接收Socket超時(shí)會(huì)拋出SocketTimeoutException。

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

當(dāng)連接HTTPserver或者等待HttpConnectionManager管理的一個(gè)有效連接超時(shí)出錯(cuò)會(huì)拋出ConnectionTimeoutException。

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

總結(jié):

SocketTimeoutException異常是一個(gè)通用的異常,無(wú)論是用原生的HTTP請(qǐng)求,還是用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('請(qǐng)求連接超時(shí):' + e.getMessage()); } catch (IOException e) { e.printStackTrace(); System.out.println('請(qǐng)求異常,異常信息:' + e.getMessage()); } catch (Exception e) { e.printStackTrace(); } return null;}

補(bǔ)充:java 發(fā)送http請(qǐng)求(連接超時(shí)處理)

業(yè)務(wù)背景:

某項(xiàng)目跟第三方公司對(duì)接。

業(yè)務(wù)描述:

出于數(shù)據(jù)安全考慮,需要從服務(wù)器發(fā)送請(qǐng)求,來(lái)調(diào)用第三方公司提供的接口。但是該場(chǎng)景是銷售類型,響應(yīng)時(shí)間必須夠快,那么就要設(shè)置響應(yīng)的超時(shí)處理。

不然讓客戶看著圈圈在那里轉(zhuǎn)半天,誰(shuí)買?

項(xiàng)目架構(gòu):

jdk1.7

spring4.2.9

詳細(xì)內(nèi)容:

CloseableHttpClient httpclient = HttpClients.createDefault();try { HttpPost httpPost = new HttpPost(要訪問的URL); //配置超時(shí) RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(5000).setConnectionRequestTimeout(5000) .setSocketTimeout(5000).build(); httpPost.setConfig(requestConfig); //設(shè)置post請(qǐng)求參數(shù) List<NameValuePair> nvps = new ArrayList<NameValuePair>(); nvps.add(new BasicNameValuePair('attr1', 參數(shù)值1)); nvps.add(new BasicNameValuePair('attr2', 參數(shù)值2)); nvps.add(new BasicNameValuePair('attr3', 參數(shù)值3)); …… httpPost.setEntity(new UrlEncodedFormEntity(nvps)); //執(zhí)行post請(qǐng)求 CloseableHttpResponse response = httpclient.execute(httpPost); // 判斷網(wǎng)絡(luò)連接狀態(tài)碼是否正常(0--200都數(shù)正常) if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){//獲取響應(yīng)實(shí)體 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('請(qǐng)求未成功響應(yīng): '+ response.getStatusLine()); } } catch (ConnectTimeoutException e) { System.out.println(api_type+'請(qǐng)求超時(shí)'); } catch (ClientProtocolException e) { System.out.println('請(qǐng)求失敗'); } catch (Exception e) { e.printStackTrace(); } finally { //釋放連接 try { if(httpclient!=null){ httpclient.close(); } } catch (IOException e) { System.out.println(api_type+'連接無(wú)法關(guān)閉'); } } .setConnectTimeout(5000).setConnectionRequestTimeout(5000) .setSocketTimeout(5000).build(); httpPost.setConfig(requestConfig); //設(shè)置post請(qǐng)求參數(shù) List<NameValuePair> nvps = new ArrayList<NameValuePair>(); nvps.add(new BasicNameValuePair('attr1', 參數(shù)值1)); nvps.add(new BasicNameValuePair('attr2', 參數(shù)值2)); nvps.add(new BasicNameValuePair('attr3', 參數(shù)值3)); …… httpPost.setEntity(new UrlEncodedFormEntity(nvps)); //執(zhí)行post請(qǐng)求 CloseableHttpResponse response = httpclient.execute(httpPost); // 判斷網(wǎng)絡(luò)連接狀態(tài)碼是否正常(0--200都數(shù)正常) if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){//獲取響應(yīng)實(shí)體 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('請(qǐng)求未成功響應(yīng): '+ response.getStatusLine()); } } catch (ConnectTimeoutException e) { System.out.println(api_type+'請(qǐng)求超時(shí)'); } catch (ClientProtocolException e) { System.out.println('請(qǐng)求失敗'); } catch (Exception e) { e.printStackTrace(); } finally { //釋放連接 try { if(httpclient!=null){ httpclient.close(); } } catch (IOException e) { System.out.println(api_type+'連接無(wú)法關(guān)閉'); } }

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 欧美a大片欧美片 | 精品久久久久久无码中文字幕 | 久久国产一级毛片一区二区 | 91视频久久 | 国产男女爽爽爽爽爽视频 | 一区二区在线看 | 99re66热这里只有精品免费观看 | 国内精品久久久久影院亚洲 | 欧美亚洲综合另类在线观看 | 91精品国产高清久久久久久io | 欧美另类69xxxxx 视频 | 国产在线观看xxxx免费 | 男女一级爽爽快视频 | 日本丶国产丶欧美色综合 | 日韩3级 | 日韩中文字幕在线亚洲一区 | 亚洲欧美精品久久 | 亚洲成人7777| 国产在线视频欧美亚综合 | 日韩三级精品 | 好吊色37pao在线观看 | 日本wwww视频 | 亚洲欧美精品中字久久99 | 国产在线精品观看一区 | 免费看片亚洲 | 国产欧美日本亚洲精品五区 | 国产欧美日韩免费一区二区 | 久草免费资源站 | 欧美67194| 99久久99热久久精品免费看 | 欧美va在线播放免费观看 | 欧美综合精品一区二区三区 | 深夜福利爽爽爽动态图 | 欧美在线一级va免费观看 | 国产啪精品视频网免费 | 亚洲欧美国产日韩天堂在线视 | 精品免费国产 | 亚洲第一区视频在线观看 | 日产国产精品亚洲系列 | 国产在线99 | 久久久久久在线 |