Server returned HTTP response code: 400 解决方法

时间:2025-01-14 08:35:38


问题描述

后台通过()的方式去发送http请求报400错误,发送代码,

 String sendUrl = http://ip地址:端口/test?username=admin&password=123&content=XXXX 
 URL url = new URL(sendUrl);
 HttpURLConnection huc = (HttpURLConnection) ();
 ("GET");
 ("Accept", "*/*");
 ("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.0");
 ("Content-Language", "en-US");
 ("Accept-Language","zh-CN");
 ("Content-type","text/html");
 ();
 ir  = new InputStreamReader(());
            br = new BufferedReader(ir) ;
            String line;
            while ((line = ()) != null) {
                (line);
            }
  //省略后续对返回值line 进行使用的代码

原因分析:

提示:报400错误,这种情况一般就是携带的参数有问题或者请求路径语法错误

参数错误:比如携带的参数里面带时间串:2024-01-01 00:00:00,这种带空格的参数是解析不了的。另外还有一些特殊字符也会导致解析失败报400,请求内容过长等。

语法错误:http/https的请求方式不对,路径上的链接符(?/&/=) 大小写以及中英文符错误或者缺失或者有多,

Get请求的正确路径示例:http://127.0.0.1:8080/test/add?username=admin&password=123


解决方案:

如果属是携带的参数有问题,我们可以对携带的参数进行转码即可,

比如:

http://localhost:8080/test?username=admin&password=123&content=发送时间 2024-05-08  00:00:00

转码方法:

//content就是需要转码的内容
content  = (content, "UTF-8");
注意:ip地址跟端口还有接口名称不能进行转码,另外如果路径上还携带了用户名密码不建议进行转码,否则后台接收到该请求时可能无法解析出用户名跟密码,只需要对content进行转码即可,除非用户密码携带了特殊字符,密码建议进行md5加密后在进行发送。