【问题标题】:HTTP connection with timeout under Java 1.5Java 1.5 下的 HTTP 连接超时
【发布时间】:2016-03-04 04:18:06
【问题描述】:

我通过使用 java.net.HttpURLConnection 开发了一个对 Web 服务的简单低级访问。

我需要为连接和读取设置超时,这在 Java 1.6 及更高版本下似乎是可能的,但对于 Java 1.5 我完全不知所措。

是否有任何替代 HttpURLConnection 可以满足我的需求?

我现在的代码是这样的:

        oURL = new URL( this.endpoint );
        httpCon = (HttpURLConnection)oURL.openConnection();

        httpCon.setDoOutput(true);
        httpCon.setDoInput(true);

        httpCon.setConnectTimeout( this.connect_timeout );
        httpCon.setReadTimeout( this.read_timeout );

        httpCon.setRequestMethod("POST");
        httpCon.setRequestProperty("Content-type", "text/xml; charset=utf-8");
        httpCon.setRequestProperty("SOAPAction", this.endpoint+"#"+req.getOperationName());


        reqStream = httpCon.getOutputStream();
        reqStream.write( reqXML.getBytes());

一旦我从输出流中读取响应,我就完成了。但是 1.5 下 HttpURLConnection 的实现似乎缺少这两个相关的方法。

【问题讨论】:

  • 您使用的是 jdk 1.5 吗?还是 jdk 1.4?
  • 它在 Java 1.5 下运行
  • 但是在 1.5 中它有两种方法docs.oracle.com/javase/1.5.0/docs/api/java/net/…
  • 所以我想,但是特定的子类 HttpURLConnection,即使它派生自 URLConnection,在 1.5 中似乎也缺少这两种方法
  • 大家说的都对……我把客户的话当真了……应用服务器运行在1.4以下

标签: java http timeout


【解决方案1】:

我认为你没有使用 JDK 1.5,我在 eclipse 中创建了一个 java (1.5) 项目,它允许我使用这两种方法。

    HttpURLConnection a = (HttpURLConnection)new URL("URL").openConnection();
    a.setConnectTimeout(0);
    a.setReadTimeout(0);

在方法的描述中它说它是从 1.5 开始

setConnectTimeout

设置一个指定的超时值,以毫秒为单位,当 打开到此引用的资源的通信链接 网址连接。如果在连接之前超时过期 建立后,会引发 java.net.SocketTimeoutException。超时 零被解释为无限超时。

此方法的一些非标准实现可能会忽略 指定的超时。要查看连接超时设置,请致电 getConnectTimeout()。

参数:timeout 一个int,指定连接超时值 毫秒抛出:IllegalArgumentException - 如果超时 参数为负因为: 1.5

setReadTimeout

将读取超时设置为指定的超时,以毫秒为单位。一种 非零值指定从输入流读取时的超时 当与资源建立连接时。如果超时到期 在有数据可供读取之前,a 引发 java.net.SocketTimeoutException。超时为零是 解释为无限超时。

此方法的一些非标准实现会忽略指定的 暂停。要查看读取超时设置,请调用 getReadTimeout()。

参数:timeout 一个int,指定要使用的超时值 以毫秒为单位抛出:IllegalArgumentException - 如果超时 参数为负因为: 1.5

您还可以查看 oracle 的 API 文档

http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URLConnection.html#setConnectTimeout(int)

http://docs.oracle.com/javase/1.5.0/docs/api/java/net/HttpURLConnection.html

它说 HttpURLConnection 继承自 URLConnection 并且这两个方法是 public 所以它们在 HttpURLConnection 类中.

【讨论】:

  • 哦,天哪,你完全正确...我在生产应用程序服务器下进行了测试,它在 1.4 下运行,但根据我的客户,它是 1.5...我想知道是否我可以重命名这个问题或取消它......因为它没用,我担心:(
猜你喜欢
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
  • 2011-06-02
  • 2014-04-07
  • 2011-02-25
  • 1970-01-01
  • 2013-05-23
  • 2019-02-27
相关资源
最近更新 更多