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