繁体   English   中英

如何检查URLConnection是否已处于连接状态?

[英]How to check if URLConnection is already in connected state?

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

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

但是toString()方法仅应在建立连接后才打印响应数据!

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

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

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

由于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;
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM