【问题标题】:How to check if URLConnection is already in connected state?如何检查 URLConnection 是否已经处于连接状态?
【发布时间】:2016-12-12 23:01:41
【问题描述】:

我想在 Java 中检查 URLConnection 的连接状态。

我想编写一个toString(URLConnection) 方法来打印连接的所有标头数据(请求和响应)。

但是toString() 方法应该只在连接已经建立时打印响应数据!

这里的问题是,一旦调用任何访问响应数据的 getter 或方法,连接就会建立。

因此,我不能简单地调用 getHeaderFields(),因为这实际上会触发连接。此辅助方法不应影响 URLConnection 的内部状态。它应该只被动地从中读取数据(已经存在并跳过尚未加载的部分。

所以简而言之,在访问任何触发 connect() 的方法之前,我需要一种方法来检查 URLConnection 是否已经处于连接状态。

【问题讨论】:

    标签: java urlconnection


    【解决方案1】:

    由于setDoOutput(boolean) (Java-Doc) 方法的性质,它可用于检测内部状态,如下所示:

    public static boolean isConnected(URLConnection con) {
        try {
            con.setDoOutput(con.getDoOutput()); // throws IllegalStateException if connected
            return false;
        } catch (IllegalStateException e) {
            return true;
        }
    }
    

    这里目前实现的方法供参考:

    public void setDoOutput(boolean dooutput) {
        if (connected)
            throw new IllegalStateException("Already connected");
        doOutput = dooutput;
    }
    

    【讨论】:

      【解决方案2】:

      创建URLConnection 的子类,在此您可以访问具有protected 访问修饰符的connected 字段。

      除此之外,如果连接已经建立,您可以调用其中一种引发异常的方法,例如 uc.setDefaultUseCaches(uc.getDefaultUseCaches()) 并捕获异常,或者使用反射来获取 connected 字段的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-07
        • 2018-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多