当前位置: 首页 > 面试题库 >

返回2xx以外的代码时,如何使用HttpURLConnection获取响应主体?

仇睿
2023-03-14
问题内容

当服务器返回错误时,我在检索Json响应时遇到问题。请参阅下面的详细信息。

我如何执行请求

我用java.net.HttpURLConnection。我设置请求属性,然后执行:

conn = (HttpURLConnection) url.openConnection();

之后,当请求成功时,我得到响应Json:

br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
sb = new StringBuilder();
String output;
while ((output = br.readLine()) != null) {
  sb.append(output);
}
return sb.toString();

…而问题是:

当服务器返回诸如50x或40x之类的错误时,我无法检索收到的Json。以下行引发IOException:

br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
// throws java.io.IOException: Server returned HTTP response code: 401 for URL: www.example.com

服务器肯定会发送正文,我可以在外部工具Burp Suite中看到它:

HTTP/1.1 401 Unauthorized

{"type":"AuthApiException","message":"AuthApiException","errors":[{"field":"email","message":"Invalid username and/or password."}]}

我可以使用以下方法获取响应消息(即“内部服务器错误”)和代码(即“ 500”):

conn.getResponseMessage();
conn.getResponseCode();

但是我无法检索请求正文…也许我在库中没有注意到某些方法?


问题答案:

如果响应码不是200或2xx,请使用getErrorStream()代替getInputStream().



 类似资料:
  • 在我的烧瓶应用程序中,我想将响应存储在MongoDB中。我想更改状态代码和响应数据,以防存储任务无法完成。如何更改响应对象的状态代码 这是用于Python3.6中开发的Flask应用程序 现在如果有异常,我收到状态代码200

  • 问题内容: 我已经使用Selenium2 / WebDriver编写了测试,并且想要测试HTTP请求是否返回HTTP 403 Forbidden。 是否可以使用Selenium WebDriver获取HTTP响应状态代码? 问题答案: 一言以蔽之。无法使用Selenium WebDriver API。此问题已在项目的问题跟踪器中进行了讨论,该功能不会添加到API中。

  • 问题内容: 我已经使用Selenium2 / WebDriver编写了测试,并且想要测试HTTP请求是否返回HTTP 403 Forbidden。 是否可以使用Selenium WebDriver获取HTTP响应状态代码? 问题答案: 一言以蔽之。无法使用Selenium WebDriver API。此问题已在项目的问题跟踪器中进行了讨论,并且该功能不会添加到API中。

  • 问题内容: 我正在发出HTTP请求并侦听“数据”: 问题在于响应是分块的,因此“数据”只是发送回的一部分内容。 我如何将全身退回? 问题答案:

  • 我想给来自我的服务器的http响应添加一些头。我需要添加标题,无论代码(2xx,4xx,5xx)返回应用程序。我尝试用< code>@WebFilter批注实现< code > javax . servlet . filter ,用< code>@Provider批注实现< code > javax . ws . RS . container . container response filter

  • 我正在尝试验证10万人的linkedIn配置文件,并编写了一个伪代码,但其给出的“java.io.IOException:Server返回了URL的HTTP响应代码:403:https://www.linkedin.com/in/test.user" 我尝试设置不同的setRequestProperty,但不起作用。 公共静态空main(最终字符串[]参数){ 上述代码的输出代码为: