在 Java 中检索服务器端 HTTP 错误消息
Retrieving server side HTTP error messages in Java
我正在构建一个后端服务器端 java 应用程序,它使用 post 方法将数据发送到 API,基于我在 Python 和 C#(控制台应用程序)。此 API 具有与各种响应代码关联的特定响应。我尝试使用下面的代码,但响应消息似乎只是与响应代码关联的通用系统消息,而不是我正在访问的 API 上的消息。
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.run(HttpURLConnection.java:1926)
at sun.net.www.protocol.http.HttpURLConnection.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);
}
}
如果你只使用 java.net.HttpURLConnection
对于成功响应,有 connection.getInputStream()
获取响应正文。
但是对于错误响应,connection.getErrorStream()
错误响应正文所在的位置。
我的意思是示例服务器 returns HTTP 404 - 自定义 HTML 页面未找到错误。
HTML 将在错误流中而不是在输入流中。
当然,响应代码在 connection.getResponseCode()
中,如 int
(即 404),响应消息在 getResponseMessage()
(即 "Not Found")
中
我正在构建一个后端服务器端 java 应用程序,它使用 post 方法将数据发送到 API,基于我在 Python 和 C#(控制台应用程序)。此 API 具有与各种响应代码关联的特定响应。我尝试使用下面的代码,但响应消息似乎只是与响应代码关联的通用系统消息,而不是我正在访问的 API 上的消息。
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.run(HttpURLConnection.java:1926)
at sun.net.www.protocol.http.HttpURLConnection.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);
}
}
如果你只使用 java.net.HttpURLConnection
对于成功响应,有 connection.getInputStream()
获取响应正文。
但是对于错误响应,connection.getErrorStream()
错误响应正文所在的位置。
我的意思是示例服务器 returns HTTP 404 - 自定义 HTML 页面未找到错误。 HTML 将在错误流中而不是在输入流中。
当然,响应代码在 connection.getResponseCode()
中,如 int
(即 404),响应消息在 getResponseMessage()
(即 "Not Found")