簡體   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