0

我正在使用java.net.HttpUrlConnection向我的服務器發出Http請求。我意識到如果服務器返回錯誤狀態(例如400)。 HttpUrlConnection將拋出一個對應於錯誤狀態的IOException。如果服務器返回錯誤狀態,java.net.HttpUrlConnection是否總是拋出IOException?

我的問題是:如果服務器返回錯誤狀態(4xx,5xx),HttpUrlConnection是否總是拋出IOException?

我看看HttpUrlConnection API說明,但我無法回答我的問題。

更新:請參閱我的測試:

public static void main(String[] args) { 
    try { 

     String url = "https://www.googleapis.com/oauth2/v3/userinfo?access_token=___fake_token"; 
     HttpURLConnection conn = (HttpURLConnection)new URL(url).openConnection(); 

     conn.getResponseCode(); 
     conn.getInputStream(); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
     // Print IOException: java.io.IOException: Server returned HTTP response code: 401 for URL: https://www.googleapis.com/oauth2/v3/userinfo?access_token=abc 

     // If I commented conn.getResponseCode() -> The same IOException 
    } 
} 

謝謝!

+0

HTTP錯誤401 - 未經授權:由於證書無效,訪問被拒絕。如果滿足下列條件,則會發生此行爲:您嘗試查看的網站使用集成Windows身份驗證。 Web站點的應用程序池在身份驗證過程中進行回收。 –

回答

3

如果您在getInputStream()之前檢查getResponseCode()並且問題是HTTP返回代碼而不是連接錯誤,則不適用。

+0

我收錄了一個測試。我在getInputStream之前調用了getResponseCode,並且出現了IOException。請看我的例子! – Loc

+0

@Loc在這兩種情況下,'getInputStream()'拋出異常。你的新例子是徒勞的,因爲你忽略了getResponseCode()的結果。如果你已經正確編程了,正如我所設想的那樣,你會看到這個值是401,而不是試圖調用'getInputStream()'。 – EJP

+0

我現在明白了。謝謝! – Loc

相關問題