HttpUrlConnection获取非200状态码的响应体

HttpUrlConnection 请求完成后  获取响应体的方式根据状态码不同而不同

200状态码:connection.getInputStream();

非200状态码:connection.getErrorStream();

    public static Result sendPost(String httpUrl, String param) throws IOException,MalformedURLException  {
        HttpURLConnection connection = null;
         InputStream is = null;
         OutputStream os = null;
         BufferedReader br = null;
         Result result = new Result();
         try {
             URL url = new URL(httpUrl);
             // 通过远程url连接对象打开连接
             connection = (HttpURLConnection) url.openConnection();
             // 设置连接请求方式
             connection.setRequestMethod("POST");
             // 设置连接主机服务器超时时间:15000毫秒
             connection.setConnectTimeout(60000);
             // 设置读取主机服务器返回数据超时时间:60000毫秒
             connection.setReadTimeout(60000);
             // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true
             connection.setDoOutput(true);
             // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无
             connection.setDoInput(true);
             // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
             // 设置鉴权信息:Authorization: Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0
             connection.setRequestProperty("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");
             // 通过连接对象获取一个输出流
             os = connection.getOutputStream();
             if(param!=null){
                 os.write(param.getBytes());
             }
             // 通过连接对象获取一个输入流,向远程读取
             if (connection.getResponseCode() == 200) {
                 is = connection.getInputStream();
                 // 对输入流对象进行包装:charset根据工作项目组的要求来设置
                 br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                 StringBuffer sbf = new StringBuffer();
                 String temp = null;
                 // 循环遍历一行一行读取数据
                 while ((temp = br.readLine()) != null) {
                     sbf.append(temp);
                     sbf.append("
");
                 }
                 result=Results.successWithData(sbf.toString(), "200", "获取成功");
             }else {
                 try {
                    is = connection.getErrorStream();
                     // 对输入流对象进行包装:charset根据工作项目组的要求来设置
                     br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                     StringBuffer sbf = new StringBuffer();
                     String temp = null;
                     // 循环遍历一行一行读取数据
                     while ((temp = br.readLine()) != null) {
                         sbf.append(temp);
                         sbf.append("
");
                     }
                     result.setMsg(sbf.toString());
                } catch (Exception e) {
                    e.printStackTrace();
                }
                 result.setCode(String.valueOf(connection.getResponseCode()));
                 result.setSuccess(false);
             }
    
         } catch (MalformedURLException e) {
            throw e;
         } catch (IOException e) {
             throw e;
         } finally {
             // 关闭资源
             if (null != br) {
                 try {
                     br.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }
             if (null != os) {
                 try {
                     os.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }
             if (null != is) {
                 try {
                     is.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
                  }
             // 断开与远程地址url的连接
             connection.disconnect();
         }
         return result;
    }
View Code
原文地址:https://www.cnblogs.com/xiatc/p/12421300.html