6

这绝对是奇怪的,但我找不到任何兼容返回完整参数列表的 Java/Android URL 解析器。

我找到了 java.net.URL 和 android.net.Uri 但它们无法返回参数集合。

我想传递 url 字符串,例如

String url = "http://s3.amazonaws.com/?AWSAccessKeyId=123&Policy=456&Signature=789&key=asdasd&Content-Type=text/plain&acl=public-read&success_action_status=201";

SomeBestUrlParser parser = new SomeBestUrlParser(url);
String[] parameters = parser.getParameterNames();
// should prints array with following elements
// AWSAccessKeyId, Policy, Signature, key, Content-Type, acl, success_action_status

有谁知道现成的解决方案?

4

5 回答 5

12

有办法收集所有参数名称。

String url = "http://domain.com/page?parameter1=value1&parameter2=value2";
List<NameValuePair> parameters = URLEncodedUtils.parse(new URI(url));
for (NameValuePair p : parameters) {
    System.out.println(p.getName());
    System.out.println(p.getValue());
}
于 2012-10-05T11:29:29.177 回答
4

此静态方法从给定 URL 构建参数映射

private Map<String, String> extractParamsFromURL(final String url) throws URISyntaxException {
    return new HashMap<String, String>() {{
        for(NameValuePair p : URLEncodedUtils.parse(new URI(url), "UTF-8")) 
            put(p.getName(), p.getValue());
    }};
}

用法

extractParamsFromURL(url).get("key")

于 2014-07-30T16:35:33.980 回答
3

看看URLEncodedUtils

于 2012-10-04T13:17:18.070 回答
0

在 API 级别 1 中添加的 UrlQuerySanitizer

        UrlQuerySanitizer sanitizer = new UrlQuerySanitizer(url_string);
        List<UrlQuerySanitizer.ParameterValuePair> list =  sanitizer.getParameterList();
        for (UrlQuerySanitizer.ParameterValuePair pair : list) {
            System.out.println(pair.mParameter);
            System.out.println(pair.mValue);
        }
于 2017-11-09T20:41:36.043 回答
0

urllib库将解析查询字符串参数,并允许您以列表或映射的形式访问参数。如果可能有重复的键,请使用列表,否则地图非常方便。

鉴于此片段:

String raw = "http://s3.amazonaws.com/?AWSAccessKeyId=123&Policy=456&Signature=789&key=asdasd&Content-Type=text/plain&acl=public-read&success_action_status=201";
Url url = Url.parse(raw);
System.out.println(url.query().asMap());
for (KeyValue param : url.query().params()) {
  System.out.println(param.key() + "=" + param.value());
}

输出是:

{Policy=456, success_action_status=201, Signature=789, AWSAccessKeyId=123, acl=public-read, key=asdasd, Content-Type=text/plain}
AWSAccessKeyId=123
Policy=456
Signature=789
key=asdasd
Content-Type=text/plain
acl=public-read
success_action_status=201
于 2017-11-12T20:20:34.713 回答