POST 请求出现异常!java.io.IOException: Server returned HTTP response code: 400 for URL

简介: POST 请求出现异常!java.io.IOException: Server returned HTTP response code: 400 for URL

http发送post请求报400,405 报错如下:

发送 POST 请求出现异常!java.io.IOException: Server returned HTTP response code: 400 for URL: http://111.123.138.247:8080/jobScheduler/pendingJobjava.io.IOException: Server returned HTTP response code: 400 for URL: http://111.123.138.247:8083/jobScheduler/pendingJob
  at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1627)
  at com.ulearning.ulms.util.HttpClientUtil.sendPost(HttpClientUtil.java:233)
  at com.ulearning.ulms.homework.action.TutorHomeworkAction.pushMessage(TutorHomeworkAction.java:799)
  at com.ulearning.ulms.homework.action.TutorHomeworkAction.saveOrUpdateHomework(TutorHomeworkAction.java:742)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:606)
  at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
  at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)
  at com.ulearning.ulms.homework.action.TutorHomeworkAction.execute(TutorHomeworkAction.java:142)
  at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
  at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
  at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1480)
  at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:524)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
  at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
  at com.ulearning.ulms.core.filter.JSPSupportFilter.doFilter(JSPSupportFilter.java:51)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
  at com.ulearning.ulms.util.RolePermissionFilter.doFilter(RolePermissionFilter.java:72)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
  at com.ulearning.ulms.util.XssFilter.doFilter(XssFilter.java:23)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
  at com.ulearning.ulms.util.BehaviorRecordsFilter.doFilter(BehaviorRecordsFilter.java:84)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
  at com.ulearning.ulms.util.i18n.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:103)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
  at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
  at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
  at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
  at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

解决方法:400报错,可以确定的是传入参数有问题,所以要从传参这查起


错误一: 参数时间格式是"yyyy-MM-dd HH:mm:ss",接收的是"yyyy-MM-dd HH:mm",导致时间格式和接收方不一样,所以报错,把转换的时间格式改为和需要接受的参数一致即可

com.alibaba.fastjson.JSONObject jsonStr = new com.alibaba.fastjson.JSONObject();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
JSONObject jsonStr = new JSONObject();
Date dBefore = new Date();
Calendar calendar = Calendar.getInstance(); //得到日历
calendar.setTime(ah.getEndTime());//把当前时间赋给日历
calendar.add(Calendar.DAY_OF_MONTH, -1); //设置为前一天
dBefore = calendar.getTime(); //得到前一天的时间
String defaultStartDate = sdf.format(dBefore); //格式化前一天
jsonStr.put("pushTime", defaultStartDate );
jsonStr.put("content", "你好");
try {
  HttpClientUtil.sendPost(url, jsonStr.toString(),null,HttpClientUtil.CONTENTTYPE);
} catch (Exception e) {
  e.printStackTrace();
}

错误二:中文参数乱码问题,导致400错误

 public static String sendPost(String url, String param, String contentType) {
      OutputStreamWriter out = null;
      BufferedReader in = null;
      String result = "";
      try {
          URL realUrl = new URL(url);
          // 打开和URL之间的连接
          HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
          // 设置通用的请求属性
          conn.setRequestProperty("accept", "*/*");
          conn.setRequestProperty("connection", "Keep-Alive");
          conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
          conn.setRequestProperty("Content-Type", contentType);
          // 发送POST请求必须设置如下两行
          conn.setDoOutput(true);
          conn.setDoInput(true);
        /*************************************************************************/  
          // 获取URLConnection对象对应的输出流
          // out = new PrintWriter(conn.getOutputStream());
          out = new OutputStreamWriter(conn.getOutputStream(), "utf-8"); // 8859_1
    /*************************************************************************/  
          out.write(param); // post的关键所在
          // 发送请求参数
          // out.print(param);
          // flush输出流的缓冲
          out.flush();
          // 定义BufferedReader输入流来读取URL的响应
          int code = conn.getResponseCode();
          if(code == 200) {
              in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
          }else{
              in = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
          }
          String line;
          while ((line = in.readLine()) != null) {
              result += line;
          }
      } catch (Exception e) {
          System.out.println("发送 POST 请求出现异常!" + e);
          e.printStackTrace();
      }
      // 使用finally块来关闭输出流、输入流
      finally {
          try {
              if (out != null) {
                  out.close();
              }
              if (in != null) {
                  in.close();
              }
          } catch (IOException ex) {
              ex.printStackTrace();
          }
      }
      return result;
    }


解决方法:发送post方法 OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(), "utf-8");


问题三:报405的原因:在post方法中添:conn.setRequestProperty("Content-Type", contentType);

相关文章
|
3月前
|
设计模式 Java Spring
Java 设计模式之责任链模式:优雅处理请求的艺术
责任链模式通过构建处理者链,使请求沿链传递直至被处理,实现发送者与接收者的解耦。适用于审批流程、日志处理等多级处理场景,提升系统灵活性与可扩展性。
389 2
|
5月前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
592 2
|
10月前
|
API 开发者
了解 HTTP 的PUT 与 POST方法的综合指南
HTTP PUT 和 POST 方法是构建 Web 应用与 API 的核心工具,用于资源的创建与更新。PUT 方法通过指定 URL 更新或创建完整资源,具有幂等性;而 POST 方法更灵活,主要用于创建新资源,但不具备幂等性。本文详细对比了两者在请求体、URL 使用、资源处理等方面的区别,并提供了实际应用示例,帮助开发者根据场景选择合适的方法以优化 API 设计。
|
10月前
|
API Kotlin
动态URL构建与HTTP请求的Kotlin实现
动态URL构建与HTTP请求的Kotlin实现
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
278 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
10月前
|
运维 Cloud Native Java
postman发起post请求遇到报错:java.io.FileNotFoundException (文件名、目录名或卷标语法不正确。)
遇到bug报错,多猜可能的原因,控制变量反复测试,直至找到问题的关键,然后再思考如何解决或者回避。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
214 6
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
缓存 安全 API
http 的 get 和 post 区别 1000字
【10月更文挑战第27天】GET和POST方法各有特点,在实际应用中需要根据具体的业务需求和场景选择合适的请求方法,以确保数据的安全传输和正确处理。
|
JSON 编解码 安全
【HTTP】方法(method)以及 GET 和 POST 的区别
【HTTP】方法(method)以及 GET 和 POST 的区别
459 1