,,解决Java处理HTTP请求超时的问题

,,解决Java处理HTTP请求超时的问题

这篇文章主要介绍了解决Java(Java)处理http(http)请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

在发送POST或GET请求时,返回超时异常处理办法:

捕获套接字超时异常| connecttimeoutexception |连接池超时异常

三种异常说明:

socket time out异常:是Java(Java)包下抛出的异常,这定义了插座(插座)读数据的超时时间,即从服务器获取响应数据须要等待的时间;当读取或者接收插座(插座)超时会抛出socket time out异常.

ConnectTimeoutException:是阿帕奇人的http客户端(http客户端)包抛出的超时异常,定义了通过网络与服务器建立连接的超时时间,Httpclient包中通过一个异步线程去创建与服务器的插座(插座)连接,这就是该插座(插座)连接的超时时;

当连接http服务器(http服务器)或者等待HttpConnectionManager管理的一个有效连接超时出错会抛出ConnectionTimeoutException .

连接池超时:也是阿帕奇人的http客户端(http客户端)包抛出的超时异常,定义了从连接管理器(连接管理器)管理的连接池中取出连接的超时时间;出错会抛出ConnectionPoolTimeoutException .

总结:

socket time out异常异常是一个通用的异常,无论是用原生的http(http)请求,还是用阿帕奇人下的http客户端(http客户端)包,在抛出的异常中都需要捕获socket time out异常异常。

例:

公共静态字符串doget(字符串网址,对象参数、字符串内容类型)

尝试[

返回http utils。doetsend(URL、参数、内容类型):

} catch(套接字超时异常| connecttimeoutexception e)}

e。print stack trace();

System.out.println('请求连接超时:' e . getmessage();

} catch(io异常e)}

e。print stack trace();

System.out.println('请求异常,异常信息:' e . getmessage();

} catch(异常e)}

e。print stack trace();

}

返回空:

}

补充:java 发送http请求(连接超时处理)美元

业务背景:

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

业务描述:

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

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

项目架构:

jdk1.7

弹簧4.2.9

详细内容:

可关闭http client http client=http clients。创建默认值();

尝试[

HttpPost httpPost=新HttpPost(要访问的网址):

//配置超时

requestconfig请求配置=请求配置。自定义()。setConnectTimeout(5000).setconnectionrequesttime out(5000)。setsxmlsocket超时(5000).build();

http帖子。设置配置(requestconfig):

//设置员额配置表请求参数

listnamevaluepair nvps=new arraylistnamevaluepair();

nvps。add(新的basicname值对(' attr 1 ',参数值(1));

nvps。add(新的basicname值对(' attr 2 ',参数值(2));

nvps。add(新的basicname值对(' attr 3 ',参数值(3));

…………

httppost(新urlencodedformtity(nvps));

//执行员额配置表请求

可关闭的http响应=http客户端。执行(http post):

//判断网络连接状态码是否正常(0 - 200)都数正常)

if(response.getStatusLine().getStatusCode()==HttpStatus .S7-1200可编程控制器

//获取响应实体

响应=实体样式。tostring(响应。get entity(),' utf-8 '):

System.out.println(负责任);

如果(负责任!=null!等于(责任)}

字符串数据=新字符串(aesutil。解密(base64。decode(response)、key)、‘utf-8’;

msg=translate_PRE(日期、运输类型、运输编号):

result.put('msg ',msg);

}

}否则

System.out.println('请求未成功响应:' response.getStatusLine():

}

} catch(connecttimeoutexception e)}

S7-1200可编程控制器请求超时');

} catch(客户端触摸异常e)}

System.out.println('请求失败');

} catch(异常e)}

e。print stack trace();

}终于[

//释放连接

尝试[

if(httpclient!=空)

httpclient.close():

}

} catch (IOException e) {

' System.out.println(api_type '连接无法关闭');

}

}。setConnectTimeout(5000).setconnectionrequesttime out(5000)。setSocketTimeout(5000).build();

http帖子。设置配置(请求配置);

//设置邮政请求参数

ListNameValuePair nvps=new ArrayListNameValuePair();

nvps.add(新的基本名称值对(' attr1 ',参数值1));

nvps.add(新的基本名称值对(' attr2 ',参数值2));

nvps.add(新的基础名称值对(' attr3 ',参数值3));

……

httpPost.setEntity(新urlencodeformantity(nvps));

//执行邮政请求

可关闭的httpresponse响应=http客户端。执行(http post);

//判断网络连接状态码是否正常(0 - 200都数正常)

if(response.getStatusLine().getStatusCode()==HttpStatus .SC_OK){

//获取响应实体

响应消息=实体实用程序。tostring(响应。get entity(),' utf-8 ');

系统。出去。println(响应消息);

if(responseMessage!=null!''.equals(responseMessage)){

字符串数据=新字符串(AE sutil。解密(base64。解码(响应消息),密钥),‘UTF-8’);

String msg=translate_PRE(data,trans_type,trans no);

result.put('msg ',msg);

}

}否则{

System.out.println('请求未成功响应:'响应。getstatusline());

}

} catch(ConnectTimeoutException e){

' System.out.println(api_type '请求超时');

} catch(clientprotocoleexception e){

System.out.println('请求失败');

} catch(异常e) {

e。printstacktrace();

}最后{

//释放连接

尝试{

if(httpclient!=null){

http客户端。close();

}

} catch (IOException e) {

' System.out.println(api_type '连接无法关闭');

}

}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: