用于修复格式错误的URI的Scala或Java库

时间:2011-10-02 20:25:30

标签: java scala uri malformed

有没有人知道一个好的Scala或Java库可以修复格式错误的URI中的常见问题,例如包含应该转义但不是的字符?

2 个答案:

答案 0 :(得分:3)

我已经测试了一些库,包括现在遗留的URIUtil HTTPClient,但我觉得没有找到任何可行的解决方案。通常,我在这种类型的java.net.URI构造方面取得了足够的成功:

/**
 * Tries to construct an url by breaking it up into its smallest elements
 * and encode each component individually using the full URI constructor:
 *
 *    foo://example.com:8042/over/there?name=ferret#nose
 *    \_/   \______________/\_________/ \_________/ \__/
 *     |           |            |            |        |
 *  scheme     authority       path        query   fragment
 */
public URI parseUrl(String s) throws Exception {
   URL u = new URL(s);
   return new URI(
        u.getProtocol(), 
        u.getAuthority(), 
        u.getPath(),
        u.getQuery(), 
        u.getRef());
}

可以与以下程序结合使用。它重复解码URL,直到解码后的字符串不变,这对例如双重编码有用。请注意,为了简单起见,此示例没有任何故障保护等。

public String urlDecode(String url, String encoding) throws UnsupportedEncodingException, IllegalArgumentException {
    String result = URLDecoder.decode(url, encoding);
    return result.equals(url) ? result : urlDecode(result, encoding);
}

答案 1 :(得分:1)

我建议不要将java.net.URLEncoder用于编码URI的百分比。尽管有名称,但对于编码网址并不是很好,因为它不符合rfc3986标准,而是编码为application/x-www-form-urlencoded MIME格式(read more here

为了在Scala中编码URI,我建议使用spray-http中的Uri类。 scala-uri是另一种选择(免责声明:我是作者)。