【发布时间】:2011-06-23 02:39:25
【问题描述】:
我有一个 URL 列表,我需要验证这些 URL 是否有效。我用 Java 编写了一个程序,它使用 Apache 的 HttpClient 来检查链接。由于存在默认策略未处理的无效字符(例如重定向 URL 中的 {}),我不得不实施自己的重定向策略。它在大多数情况下都可以正常工作,除了其中 2 种情况:
-
路径或查询参数中的转义字符,不应进一步编码。示例:
String url = "http://www.example.com/chapter1/%3Fref%3Dsomething%26term%3D?ref=xyz"如果我使用 URI 对象,它会卡在“{”字符上。
URI myUri = new URI(url) ==> This will fail.如果我跑:
URI myUri = new URI(UriUtils.encodeHttpUrl(url))它将 %3F 编码为 %253F。 但是,当我使用 Chrome 或 Fiddler 访问该链接时,我没有看到 %3F 再次被转义。如何防止过度编码路径或查询参数?
-
URL 中的最后一个查询参数也有一个有效的 URL。例如。
String url = "www.example.com/Chapter1/?param1=xyz¶m2=http://www.google.com/?abc=1"
我当前的编码策略将查询参数拆分,然后在查询参数上调用 URLEncoder.encode。然而,这也会导致最后一个参数被编码(当我在 Fiddler 或 Chrome 中遵循它时不是这种情况)。
我尝试了很多方法(使用 UriUtils、将 URL 的特殊情况作为最后一个参数和其他技巧),但似乎没有什么是理想的。解决这个问题的最佳方法是什么?
【问题讨论】:
标签: java httpclient