org.apache.commons.net.util.Base64的encodeBase64String方法的坑
2017-01-17 15:56
561 查看
今天在做汽车之家接口数据调用时,发现一个问题,由于对方服务器有身份验证,需要根据一定的格式将相关信息加密然后转成Base64然后放到http请求的header中。
我在实际操作中遇到奇怪问题,明明加密后的字符串是错的,可对方的iis服务却能收到这个错误的请求,尽管不会通过身份验证,这时返回错误代码是401,标识没有权限,其实就是身份验证失败。
但修改代码后,确认了加密后的字符串的正确性,可对方iis服务死活接收不到请求,我观察了下返回的错误代码是400,这标识这个请求是错误的,因此应该跟汽车之家的接口没有关系,所以就仔细的检查了请求参数。
终于….发现了问题的所在。
这是我原来的代码,上面两次encryptUrl的结果分别是如下图,仔细看图别被结果迷惑:
看出区别了吧,转Base64后得到的字符串结尾有多余的东西,仔细看第二张图,我被这张图坑了,一开始我以为只有结尾会有,所以就直接encryptUrl.trim();结果请求死活过不去就是400,我就又回来仔仔细细的看了一遍数据,发现不单结尾有\r\n字符串的中间也有\r\n
真是坑爹啊,然后使用下面代码把\r\n替换掉,请求成功!
代码返回值结果参见下图,这回正常了。
我在实际操作中遇到奇怪问题,明明加密后的字符串是错的,可对方的iis服务却能收到这个错误的请求,尽管不会通过身份验证,这时返回错误代码是401,标识没有权限,其实就是身份验证失败。
但修改代码后,确认了加密后的字符串的正确性,可对方iis服务死活接收不到请求,我观察了下返回的错误代码是400,这标识这个请求是错误的,因此应该跟汽车之家的接口没有关系,所以就仔细的检查了请求参数。
终于….发现了问题的所在。
String encryptUrl = autohomeTripleDES.EncryptUrl(signUrl, CARHOMEUSERNAME, CARHOMEPASSWORD); encryptUrl = Base64.encodeBase64String(encryptUrl.getBytes("UTF-8")); Header[] headers = {new BasicHeader("Authorization","Basic " + encryptUrl)}; String json = HttpJsonClient.getJsonData(signUrl, null, 60,headers);
这是我原来的代码,上面两次encryptUrl的结果分别是如下图,仔细看图别被结果迷惑:
看出区别了吧,转Base64后得到的字符串结尾有多余的东西,仔细看第二张图,我被这张图坑了,一开始我以为只有结尾会有,所以就直接encryptUrl.trim();结果请求死活过不去就是400,我就又回来仔仔细细的看了一遍数据,发现不单结尾有\r\n字符串的中间也有\r\n
真是坑爹啊,然后使用下面代码把\r\n替换掉,请求成功!
String encryptUrl = autohomeTripleDES.EncryptUrl(signUrl, CARHOMEUSERNAME, CARHOMEPASSWORD).replaceAll("\r\n", ""); encryptUrl = Base64.encodeBase64String(encryptUrl.getBytes("UTF-8")).replaceAll("\r\n", "");
代码返回值结果参见下图,这回正常了。
相关文章推荐
- org.apache.commons.lang.StringUtils(StringUtils工具类的常用方法)
- org.apache.commons.lang.StringUtil(StringUtil包函数(用法))
- java.lang.NoSuchMethodError: org.apache.commons.validator.Validator.setParameter(Ljava/lang/String;Ljava/lang/Object;)V解决方法
- org.apache.commons.lang.StringUtils方法讲解
- org.apache.commons.lang.StringUtil的使用(转帖)
- org.apache.commons.net.ftp.FTPClient上传文件大小改变的解决方法
- org.apache.commons.lang.StringUtil(StringUtil包函数(用法))
- 我的解决org.apache.commons.lang.xwork.StringUtils异常的方法
- org.apache.commons.lang.StringUtils(StringUtils工具类的常用方法)
- org.apache.commons.lang.StringUtils(StringUtils工具类的常用方法)
- org.apache.commons.lang.StringUtils(StringUtils工具类的常用方法)
- org.apache.commons.lang.StringUtils(StringUtils工具类的常用方法)
- org.apache.commons.lang.StringUtils中常用的方法
- StringUtil包函数(org.apache.commons.lang.StringUtil)之用法
- 使用org.apache.commons.lang.StringUtils方法containsAny误区 看看你们遇到过没有
- org.apache.commons.lang.StringUtils(StringUtils工具类的常用方法)
- 3.网上解决org.apache.commons.lang.xwork.StringUtils的方法都弱爆了,看我怎么解决它!
- org.apache.commons.lang.StringUtil(StringUtil包函数(用法))
- org.apache.commons.lang.StringUtil的使用(转帖)
- org.apache.commons.lang.StringUtils;的时候出错解决方法