URL中加入BASE64加密的字符串引起的问题(java.net.MalformedURLException:Illegal character in URL)
来源:互联网 发布:mysql修改数据 编辑:程序博客网 时间:2024/06/01 08:53
序
昨天在做一个 Demo 的时候,由于是调用第三方的接口,采用的是 HTTP 的通信协议,按照文档上的说明,需要把参数进行加密后加入到 URL 中,但是,就是这个看似普普通通的操作,却让我着实费了很大的劲。
背景
关于 BASE64,我不想说太多,因为这是很基本的一种编码方式,或者说是加密方式。不了解的可以到我前面的博客中去看看,关于加密,前边有一个系列的文章。下面说说出现这个问题的情景。
昨天拿到一个任务,写一个 Demo,目的是查询一系列的信息,当然,需要调用一个第三方的接口,根据接口文档中的说明,该接口采用的是 HTTP 协议,Post 的数据需要进行 BASE64 加密,由于我之前自己封装了一系列的加密算法,因此,就直接拿过来用了。这里先说明一下,在我封装的加密算法中,用到的是 sun 的 BASE64Encoder,也就是说,我引入的是这个类:
import sun.misc.BASE64Encoder;
这里看不出有什么问题,请接着看下边。
出现的问题
就这样,每当测试的时候,程序总是会报同一个错误 —— (java.net.MalformedURLException:Illegal character in URL),刚开始的时候,我还以为是自己写的 模拟 Post 提交的代码有问题呢,于是网上查了又查,最后发现没有什么问题。于是,排除了这一块,就开始找别的原因。什么百度、Google 都查遍了,问题也没有解决,当初也没有想到是 BASE64 加密的问题。因为之前一直在用,也没有出现什么错误。
这个问题从中午一直持续到了下班之前,记得还是下午 5 点多的时候,终于从网上发现一篇文章,好像也是遇到了同样的问题,从他的文章中找到了原因。
解决方案
之所以出现这样的问题,是由于在 BASE64 加密的过程中,引错了 jar 包,不应该使用 Sun 提供的内部包,也就是 sun.misc,后来了解到 sun.misc 包是 Sun 公司提供给内部使用的专用 API,在 java API 文档中我们看不到任何有关 BASE64 影子,不建议使用。
经过测试,我发现,除了使用 sun.misc 包的 BASE64 报错外,其他两个都可以正常运行,这两个包括:
- com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
- org.apache.commons.codec.binary.Base64;
这两个提供的实现都可以正常运行。至于这两个的加密方法嘛,百度一下下吧。。。
结束语
通过这个问题,我发现,很多时候,我们往往忽略一些看似很没用的东西,而正是这些没用的东西,时不时的会在我们的路途中横上一杠子,我想说的是,尽管会出现这样那样的问题,还是要耐着性子去解决,不要把问题留给以后。
而且,当我们在学习某一类知识的时候,如果有时间,可以多想想,涉及一下与其相关的知识,或许你会有意想不到的收获。
3 0
- URL中加入BASE64加密的字符串引起的问题(java.net.MalformedURLException:Illegal character in URL)
- URL中加入BASE64加密的字符串引起的问题(Illegal base64 character a)
- base64加密放入URL引发的问题解决,java.net.MalformedURLException:Illegal character in URL
- Illegal character in URL 解决方案(URL中含有base64处理参数)
- Illegal character in query Url中含有{}
- url中jsessionid引起的一个问题
- MySQL中URL &引起的问题
- URL中嵌套用户名:密码的问题处理(base64加密的方式)
- java 中字符串加密解密 字符编码转换 有利于url 的加密和解密
- 如何解决java.lang.IllegalArgumentException: Illegal character in query at index 的问题?
- 通过URL传递base64编码的问题
- asp.net URL参数加密解密的问题
- Java中获得完整的URl字符串
- Mvc中url地址栏base64加密
- Java BASE64加密解密 url等
- java.net.URL的URL构建方式
- base64编码,用于url中传输的base64
- base64编码,用于url中传输的base64
- 5.18~5.19
- Java------基础知识
- 抓包工具wireshark---学习篇:6
- LeetCode_Linked List_Merge Two Sorted Lists
- TCP/IP数据包结构详解
- URL中加入BASE64加密的字符串引起的问题(java.net.MalformedURLException:Illegal character in URL)
- 为button设置背景图片,且全无button痕迹的css
- 视觉直观感受 7 种常用的排序算法
- mongo笔记之监控
- 使用BlockingQueue进行线程间通信(java)
- DNS
- fatal error C1083: Cannot open include file: 'SDKDDKVer.h': No such file or directory
- 今天继续看不懂
- Tcl学习之--语法|变量