获得从Java / Android的URL参数名称集合(Get parameter names co

2019-09-23 12:46发布

这绝对是奇怪,但我找不到任何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

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

Answer 1:

有办法让所有的参数名称的集合。

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


Answer 2:

这个静态方法建立从给定的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)获得( “钥匙”)



Answer 3:

看一看URLEncodedUtils



Answer 4:

UrlQuerySanitizer在API级别1中添加

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


Answer 5:

该urllib的库将解析查询字符串参数,并允许您访问PARAMS无论是作为列表或地图。 使用列表中,如果有可能是重复键,否则地图是非常方便的。

鉴于这个片段:

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


文章来源: Get parameter names collection from Java/Android url