2024年4月2日发(作者:)

Java设置Http请求超时时间

Java中可以使用HttpURLConnection来请求WEB资源。

HttpURLConnection对象不能直接构造,需要通过nnection()来获得

HttpURLConnection对象,示例代码如下:

String szUrl = "/";

URL url = new URL(szUrl);

HttpURLConnection urlCon = (HttpURLConnection)nnection();

HttpURLConnection是基于HTTP协议的,其底层通过socket通信实现。如果不设

置超时(timeout),在网络异常的情况下,可能会导致程序僵死而不继续往下执行。可以

通过以下两个语句来设置相应的超时:

perty("tConnectTimeout", 超时毫秒数字符

串);

perty("tReadTimeout", 超时毫秒数字符串);

其中: tConnectTimeout:连接主机的超时时间(单位:毫秒)

tReadTimeout:从主机读取数据的超时时间(单位:毫秒)

例如:

perty("tConnectTimeout", "30000");

perty("tReadTimeout", "30000");

JDK 1.5以前的版本,只能通过设置这两个系统属性来控制网络超时。在1.5中,还可

以使用HttpURLConnection的父类URLConnection的以下两个方法:

setConnectTimeout:设置连接主机超时(单位:毫秒)

setReadTimeout:设置从主机读取数据超时(单位:毫秒)

例如:

HttpURLConnection urlCon = (HttpURLConnection)nnection();

nectTimeout(30000);

dTimeout(30000);

需要注意的是,笔者在JDK1.4.2环境下,发现在设置了defaultReadTimeout的情

况下,如果发生网络超时,HttpURLConnection会自动重新提交一次请求,出现一次请

求调用,请求服务器两次的问题(Trouble)。我认为这是JDK1.4.2的一个bug。在JDK1.5.0

中,此问题已得到解决,不存在自动重发现象。