互联网并发与安全系列教程(10) -基于URL转码方式实现API设计
程序员文章站
2023-12-27 14:04:15
...
不管是以何种方式传递url时,如果要传递的url中包含特殊字符,如想要传递一个+,但是这个+会被url会被编码成空格,想要传递&,被url处理成分隔符。
尤其是当传递的url是经过Base64加密或者RSA加密后的,存在特殊字符时,这里的特殊字符一旦被url处理,就不是原先你加密的结果了。
url特殊符号及对应的编码:
URLEncode和URLDecode
接收参数案例tranIndex
@RestController
public class TranController {
// 接受客户端参数
@RequestMapping("/tranIndex")
public String tranIndex(String name) {
System.out.println("name:" + name);
return name;
}
}
客户端访问结果:传入+
参数变为了空格。
解决办法:将+变为%2B
Java代码处理转码
URLEncoder.encode和decode
String encode = URLEncoder.encode("1+1", "UTF-8");
String decode = URLDecoder.decode(encode, "UTF-8");
System.out.println("encode:" + encode + ",decode:" + decode);
Http接口参数编码处理:
String url = "http://127.0.0.1:8080/tranIndex?";
// 参数转码
String strParam = "name=" + URLEncoder.encode("1+1", "utf-8");
String newUrl = url + strParam;
String result = HttpClientUtils.httpGet(newUrl);
System.out.println("result:" + result);