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);

相关文章
|
4月前
|
Java
Java开发实现图片URL地址检验,如何编码?
【10月更文挑战第14天】Java开发实现图片URL地址检验,如何编码?
134 4
|
3月前
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
94 9
|
3月前
|
人工智能 Java 物联网
JAVA网络编程的未来:URL与URLConnection的无限可能,你准备好了吗?
随着技术的发展和互联网的普及,JAVA网络编程迎来新的机遇。本文通过案例分析,探讨URL与URLConnection在智能API调用和实时数据流处理中的关键作用,展望其未来趋势和潜力。
70 7
|
29天前
|
SQL Java API
|
2月前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
107 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
2月前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
60 6
|
3月前
|
Java 开发者
JAVA高手必备:URL与URLConnection,解锁网络资源的终极秘籍!
在Java网络编程中,URL和URLConnection是两大关键技术,能够帮助开发者轻松处理网络资源。本文通过两个案例,深入解析了如何使用URL和URLConnection从网站抓取数据和发送POST请求上传数据,助力你成为真正的JAVA高手。
95 11
|
3月前
|
JSON 安全 算法
JAVA网络编程中的URL与URLConnection:那些你不知道的秘密!
在Java网络编程中,URL与URLConnection是连接网络资源的两大基石。本文通过问题解答形式,揭示了它们的深层秘密,包括特殊字符处理、请求头设置、响应体读取、支持的HTTP方法及性能优化技巧,帮助你掌握高效、安全的网络编程技能。
119 9
|
3月前
|
JSON Java API
JAVA网络编程新纪元:URL与URLConnection的神级运用,你真的会了吗?
本文深入探讨了Java网络编程中URL和URLConnection的高级应用,通过示例代码展示了如何解析URL、发送GET请求并读取响应内容。文章挑战了传统认知,帮助读者更好地理解和运用这两个基础组件,提升网络编程能力。
85 5
|
4月前
|
存储 网络协议 前端开发
在 Java 中如何完全验证 URL
在 Java 中如何完全验证 URL
123 8

热门文章

最新文章