[英]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.