从Java / Android url获取参数名称集合

时间:2012-10-04 13:13:06

标签: java android url parameters uri

这是非常奇怪的,但我找不到任何兼容的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

有没有人知道现成的解决方案?

5 个答案:

答案 0 :(得分: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());
}

答案 1 :(得分: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)获得(&#34;键&#34)

答案 2 :(得分:3)

答案 3 :(得分: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);
        }

答案 4 :(得分:0)

urllib库将解析查询字符串参数,并允许您将列表作为列表或映射进行访问。如果可能存在重复键,请使用列表,否则地图非常方便。

鉴于此片段:

select

输出结果为:

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());
}