遇到一个特别坑的问题,记录下来,以免以后再被坑。
在项目里写了一个通用的HTTP协议的POST方法,然后在4.0以上的系统上使用一点问题都没有,结果换到2.3系统就出毛病了。
在进行网络请求时,参数编码各种设置都正确,依然一直会返回400错误 Your browser sent a request that this server could not understand.
最后实在是无奈,抓包看具体的数据提交内容,才找到真正的原因,T_T。
Http协议在处理请求头部信息的时候,请求头部的连续两个换行(\r\n\r\n)会被当做头部的结束标志来处理。
所以请求头部如果不到结尾地方,不能有(\r\n\r\n)隔行的换行出现。
而正好公司做的API接口,都加的有权限验证,需要设置请求头部Authorization的属性。
byte[] token = (ConstantValues.username + ":" + ConstantValues.password).getBytes("utf-8");
String authorization = "Basic "+ new String(Base64.encode(token, Base64.DEFAULT),"utf-8");
然后问题就来了,好像在2.3的系统上Base64.encode()这个方法,在对内容进行Base64编码之后,会在返回的结尾加上一个换行。
需要处理掉这个换行才可以,不然请求头部会被提前结束掉。造成无效的访问。
httpPost.setRequestProperty("Authorization", authorization.trim());
调用String的trim()方法就行了。
Good Good Study,Day Day Fuck !!!