我想检查Java中URLConnection的连接状态。
我想编写toString(URLConnection)
方法来打印连接的所有标头数据(请求和响应)。
但toString()
方法只应在已建立连接时打印响应数据!
这里的问题是,一旦调用任何访问响应数据的getter或方法,就会建立连接。
因此我不能简单地调用getHeaderFields(),因为这实际上会触发连接。此辅助方法不应影响URLConnection的内部状态。它应该只是被动地从中读取数据(已经存在并跳过尚未加载的部分。
所以简而言之,我需要一种方法来检查URLConnection是否已经处于连接状态,然后才能访问触发connect()的任何方法。
答案 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
字段的值