2016-12-16 46 views
0

我正在構建使用post方法向API發送數據的後端服務器端java應用程序,這個應用程序基於我在Python和C#中給出的示例(控制檯應用程序) 。此API具有與各種響應代碼相關的特定響應。我嘗試使用下面的代碼,但響應消息似乎是與響應代碼關聯的通用系統消息,而不是我正在訪問的API上的消息。在Java中檢索服務器端HTTP錯誤消息

System.out.println("Response Code : " + connection.getResponseCode()); 
System.out.println("Response Message : " + connection.getResponseMessage()); 

我在C#例子中看到,他們使用引發WebException錯誤處理,但我不能找到Java等同,如果有,甚至是其中之一。

編輯:這是我用403獲得,在Python示例中的錯誤,它返回一個自定義的響應

Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: https://[redacted] 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
at sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1926) 
at sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1921) 
at java.security.AccessController.doPrivileged(Native Method) 
at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1920) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1490) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) 
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) 
at javaapplication1.JavaApplication1.main(JavaApplication1.java:59) 
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: https://api.rentrak.com/tv/v3/national_airing_views 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1876) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) 
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) 
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338) 
at javaapplication1.JavaApplication1.main(JavaApplication1.java:56) 

這是我使用來構建響應代碼

StringBuilder response; 
    try (BufferedReader in = new BufferedReader(
      new InputStreamReader(connection.getInputStream()))) { 
     String inputLine; 
     response = new StringBuilder(); 
     while ((inputLine = in.readLine()) != null) { 
      response.append(inputLine); 
     } 
    } 
+0

如果我理解你很希望得到一個HTTP響應的響應代碼?賴特? – thepaulo

+0

我想獲取存儲在API上的響應消息 – MosaicOrange

+0

如果調用的WS是一個SOAP對象,那麼您將爲未建模的故障和普通的異常子類獲得一個「SOAPFaultException」。請參閱[this](https://docs.oracle.com/cd/E24329_01/web.1211/e24965/faults.htm#WSADV623) –

回答

1

如果你只使用java.net.HttpURLConnection

成功響應有connection.getInputStream()得到響應b ODY。

但是,對於錯誤響應有connection.getErrorStream()錯誤響應正文將。

我的意思是作爲示例服務器返回HTTP 404 - 找不到自定義HTML頁面的錯誤。 該HTML將在錯誤碼流中,而不是在輸入碼流中。

當然響應代碼爲connection.getResponseCode()int(即404)和響應消息是在getResponseMessage()(即「未找到」)

+0

'響應錯誤:sun.net.www.protocol.http.HttpURLConnection $ HttpInputStream @ 36d4b5c'是我得到的錯誤,我使用HttpsURLConnection,我得到了授權密鑰的工作,只是無法取回成功的迴應。 – MosaicOrange

+0

HttpURLConnection是抽象的,HttpsURLConnection是它的擴展,也是抽象的。 sun.net.www.protocol.http.HttpURLConnection是一個實現。你可以發佈你的代碼片段嗎?在什麼時候你得到了響應錯誤? – Vadim

+0

截至目前,它看起來像當你得到的 - 你必須從該流讀取實際的響應。因爲[email protected]b5c是未實現toString()時從對象(即HttpInputStream)的默認toString()消息的結果。 – Vadim