发送 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.231.133.247:8083/jobScheduler/pendingJobjava.io.IOException: Server returned HTTP response code: 400 for URL: http://111.231.133.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)
	at java.lang.Thread.run(Thread.java:745)

解决方法:

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错误

解决方法:

发送post方法:

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

问题三:报405的原因:

在post方法中添加:

conn.setRequestProperty("Content-Type", contentType);

你可能感兴趣的:(发送 POST 请求出现异常!java.io.IOException: Server returned HTTP response code: 400 for URL:)