xutils3 getQueryStringParams天坑
org.xutils.http.RequestParams.getQueryStringParams
org.xutils.http.RequestParams.getStringParams
本文讲的是这两个方法
最初的想法是想打出post请求中所有的kv,翻看了源码找到了getQueryStringParams这个方法,toString之后实测没问题
项目上线之后反馈图片上传失败
抓包后发现所有的post请求,将参数拼接到了url之后,例如正常请求url为 https://****.com/image
实际请求url为https://****.com/image?img_content=data%3Aimage%2Fjpeg%3Bbase64%2C%2F9j%2F4AAQSkZJRgABAQAAAQABAAD%2F2wBD............
由于接口中上传图片是将图片base64后作为参数传递,将超长的参数拼接到url之后,ngix报错
HttpRequest.sendRequest(L:249): errorCode: 414, msg: Request-URI Too Large, result: <html>
<head><title>414 Request-URI Too Large</title></head>
<body bgcolor="white">
<center><h1>414 Request-URI Too Large</h1></center>
<center>nginx/1.12.2</center>
</body>
</html>
Request-URI Too Large - uri超长报错
后来改为使用getStringParams,接口恢复正常
两个方法的源码:
public List<KeyValue> getQueryStringParams() {
checkBodyParams();
return new ArrayList<KeyValue>(queryStringParams);
}
public List<KeyValue> getStringParams() {
List<KeyValue> result = new ArrayList<KeyValue>(
queryStringParams.size() + bodyParams.size());
result.addAll(queryStringParams);
result.addAll(bodyParams);
return result;
}
Tips:当需要一个功能的时候api文档中没有相应的介绍,翻看源码是正确的,但也要详细看清楚想要用的那个public方法里有没有坑