Scala或Java库来修复格式不正确的URI

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


我已经测试了一些库,包括现在传统的HTTPClient URIUtil,但没有找到任何可行的解决方案。 通常,我已经用这种类型的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);
}

我建议不要使用java.net.URLEncoder来编码URI的百分比。 尽管有这个名字,但它并不适用于编码URL,因为它不遵循rfc3986标准,而是编码为application/x-www-form-urlencoded MIME格式(请阅读更多信息)

为了在Scala中编码URI,我会推荐spray-http的Uri类。 斯卡拉乌里是一个替代品(免责声明:我是作者)。

链接地址: http://www.djcxy.com/p/55245.html

上一篇: Scala or Java Library for fixing malformed URIs

下一篇: How can I set the duration of this jQuery animation proportionally?