当前位置: 首页 > 知识库问答 >
问题:

如何通过java代码在响应不是200的post调用中捕获错误响应正文和错误代码?

劳和雅
2023-03-14

我正在编写下面的代码,但这只是在响应代码为200时捕获响应体。对于所有其他情况,它都失败了。

图片-邮递员发出呼叫和响应,其中响应代码不等于200

例如,当响应代码409时,代码抛出错误

线程“main”java.io.IOException中的异常:服务器返回HTTP响应代码:409用于URL:http://fetch.product/v1/products/PD16798270/validatejava.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1919)java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1515)at com. Main.main(Main.java:58)

我在下面使用的代码-

public static void main(String[] args) throws Exception {       
     
     String url = "http://fetch.product/v1/products/PD16798270/validate";    
     URL u = new URL(url);
    
     StringBuilder postData = new StringBuilder();
     byte[] postDataBytes = postData.toString().getBytes("UTF-8");
     
     HttpURLConnection conn = (HttpURLConnection)u.openConnection();
     conn.setRequestMethod("POST");      
     
     conn.setDoOutput(true);
     conn.getOutputStream().write(postDataBytes);
     
     Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
     StringBuilder sb = new StringBuilder();
     for (int c; (c = in.read()) >= 0;)
            sb.append((char)c);
     String response = sb.toString();
     System.out.println(response);
     
}

共有1个答案

闾丘昊然
2023-03-14

如果请求返回错误响应,您可以从连接的“错误流”中读取它。例如,无论请求返回成功还是错误,这都将读取正文:

InputStream input;
if (conn.getResponseCode() >= 400) {
    input = conn.getErrorStream();
} else {
    input = conn.getInputStream();
}

Reader in = new BufferedReader(new InputStreamReader(input, "UTF-8"));
 类似资料:
  • 我正在使用JMeter执行负载测试,用户应该执行启动-登录- clk仪表板页面- clk登录页面(登录后出现的页面,即主页),其中clk仪表板和clk登录页面重复操作5次。 直到30个用户,当我增加用户负载时,我没有收到任何错误,我开始收到错误,因为 响应代码:非HTTP响应代码:org.apache.HTTP.conn.HttpHostConnectException响应消息:非HTTP回应消息

  • 我用Badboy录制了一个脚本,并将其导出到Jmeter。该脚本包括一个post请求,该请求启动一个名为的文件。 参数随请求发送 每次我运行测试计划时,我都会收到POST请求的500错误代码(内部服务器错误)响应,如下所示 所以我使用chrome developer工具捕获请求,我发现当我试图创建一个名为已存在的文件时,服务器会以500错误代码响应,我还发现jmeter发送的请求与我使用devel

  • 我正在我的. Net Web应用程序上运行负载测试,使用Jeter。应用程序过程:启动-登录-开始测试-回答问题 直到500个用户或有时750个用户,测试才成功运行。但是当我增加负载时,我得到一个错误: 11.111.111.111是我的服务器IP地址。 我已经将jmeter.batch文件堆内存增加到HEAP=-Xms1g-Xmx4g-XX: MaxMetaspaceSize=256m Apac

  • 我正在测试使用Discord为Discord机器人发送嵌入消息。js基本上是一个节点。用于与Discord的API交互的js模块。这是我用于bot发送嵌入消息的代码: 运行代码时,在Visual Studio代码IDE中出现以下错误: TypeError:(中间值). setTitle(...). setWriter(...). setColor(...). setdescription ptio

  • 授权服务器使用HTTP 400或401状态代码进行响应。 如果在授权期间发生错误,则会发生两种情况。 在第一种情况下,不识别或识别客户端。 在第二种情况下,尽管客户端被准确识别,但其他东西仍然失败。 在这种情况下,错误响应将被发送回客户端,如下所示 - error_description - 它是由Content-Language标头指定的语言中的可选人类可读错误描述,适用于开发人员而非最终用户。

  • 问题内容: 在使用Volley库时,我注意到在进行POST时,如果服务器返回的代码304或200没有响应中的数据,Volley会将其解释为错误响应,而不是成功。 我设法通过在类的方法中添加几行代码来解决该问题。 这是解决此问题的最佳解决方案吗? 谢谢! 编辑 检查类时,我意识到Volley通过询问是否检查响应是否没有数据。 但是问题仍然是Volley尝试在parseNetworkResponse方