2016-12-12 18 views
2

Я хочу проверить состояние соединения URLConnection в Java.Как проверить, уже ли подключено соединение URLConnection?

Я хочу написать метод toString(URLConnection) для печати всех данных заголовка (запрос & Ответ) на соединение.

Но метод toString() должен печатать только данные ответа, когда соединение уже установлено!

Проблема заключается в том, что соединение устанавливается после того, как вызывается любой метод getter или method, который обращается к данным ответа.

Таким образом, я не могу просто вызвать getHeaderFields(), поскольку это фактически вызовет соединение. Этот вспомогательный метод не должен влиять на внутреннее состояние URLConnection. Он должен только пассивно читать данные из него (это уже есть и пропустить части, которые еще не загружены).

Итак, я хочу, чтобы проверить, находится ли соединение URLConnection в состоянии соединения уже до доступа к любому методу, который триггеры подключения()

ответ

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; 
} 
0

сделать подкласс URLConnection, в этом вы можете получить доступ к connected поле, которое имеет protected модификатор доступа.

Помимо этого вы можете вызвать один из методов, которые генерируют исключение, если соединение уже установлено как uc.setDefaultUseCaches(uc.getDefaultUseCaches()) и поймать исключение, или использовать отражение, чтобы получить значение поля connected.

Смежные вопросы