2016-12-16 1 views
0

私はPythonとC#(コンソールアプリケーション)で与えられた例に基づいて、postメソッドを使用してAPIにデータを送信するバックエンドサーバー側のJavaアプリケーションを構築しています。 。この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を取得することがあります卵

しかし、エラー応答の場合、エラー応答ボディはconnection.getErrorStream()になります。

サーバーがHTTP 404 - カスタムHTMLページでエラーが見つかりません。 そのHTMLは入力ストリームではなくエラーストリームになります。

コース応答コードの

intとしてconnection.getResponseCode()である(すなわち、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

関連する問題