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

时间:2016-12-12 14:52:49

标签: java urlconnection

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

除此之外,如果连接已经建立为uc.setDefaultUseCaches(uc.getDefaultUseCaches())并且捕获异常,则可以调用抛出异常的方法之一,或者使用反射来获取connected字段的值