jsoup 1.15.3 URL编码异常求助:特殊字符URL及重定向失败
Jsoup URL编码逻辑缺陷修复请求及临时解决方案
问题描述
- 使用jsoup 1.15.3抓取网页时,未编码的URL会抛出
MalformedUrlException - 内置的
org.jsoup.helper.HttpConnection#encodeUrl(java.net.URL)方法无法覆盖所有URL编码场景,例如包含[和]的URL会触发编码失败 - 即使手动编码原始URL,若请求过程中遇到重定向到需编码的URL,仍会报错,该错误源于
org.jsoup.helper.CookieUtil#asUri方法(旧版本jsoup无此问题)
临时解决方案
目前可通过Spring的UriComponentsBuilder实现完整的URL编码,代码示例如下:
import org.springframework.web.util.UriComponentsBuilder; final String encodedUrl = UriComponentsBuilder .fromUriString(url) .build() .encode() .toUri() .toString();
也可以通过禁用重定向、手动编码每个跳转URL来规避问题,但这种方式操作繁琐,不适合大规模场景。
修复诉求
希望jsoup官方能从根源修复URL编码逻辑,覆盖更多特殊字符的编码场景,同时修正CookieUtil#asUri方法在重定向过程中的URL处理逻辑,无需用户手动干预即可完成正确的URL编码,惠及所有jsoup使用者。
内容的提问来源于stack exchange,提问作者dorfri
相关产品推荐
相关产品推荐

