Groovy HttpBuilder以及Java的URI

本文探讨了使用Java中的URLEncoder类时遇到的问题,并通过实例说明了如何正确编码URL参数及路径,避免因错误编码导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你可能正纳闷为什么叫URLEncoder呢,看到这行就彻底无语了。

如果你读过Lunatech的那篇博文,现在你应该明白了,你没法通过这个类将一个URL串奇迹般地转化成一个安全,正确编码的URL对象,当然如果你没做足功课的话,这里有个小例子可以帮助你理解下。

假设你有个HTTP的服务端点http://foo.com/search,它接受一个查询参数p,p的值就是要查找的字符串。如果你搜索"You & I"这个串的话,你第一次创建的搜索的URL可能是这样:http://foo.com/search?q=You & I。这个当然没法工作,因为&是分隔查询参数name/value对的分隔符。如果你拿到这个错乱的URL串的话,你对它简直束手无策,因为首先你就没法正确的解析它。

那好,我们来使用下URLEncoder。URLEncoder.encode("You & I", "UTF-8")是结果是You+%26+I。这个%26解码之后就是&,而+号在查询串中代表的就是空格,因此这个URL是能正常工作的。

现在假设你想使用你的查询串来拼接URL路径,而不是放到URL参数里面。很明显,http://foo.com/search/You & I是错误的。不幸的是,URLEncoder.encode()的结果也是错的。http://foo.com/search/You+%26+I解码后会得到/search/You+&+I,因为+号在URL路径中是不会解析成空格的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值