java 发送http请求(连接超时处理)

本文介绍了一种在Java中使用HttpClient进行POST请求时,如何设置超时处理的方法,包括连接超时、请求超时和套接字超时,确保了在销售场景下快速响应的需求。

业务背景:

某项目跟第三方公司对接。

业务描述:

出于数据安全考虑,需要从服务器发送请求,来调用第三方公司提供的接口。但是该场景是销售类型,响应时间必须够快,那么就要设置响应的超时处理。

不然让客户看着圈圈在那里转半天,谁买?

项目架构:

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+"连接无法关闭");
	           }
	}

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值