Получить коллекцию имен параметров из Java / Android url


Это абсолютно странно, но я не могу найти ни одного 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 6

5 ответов:

Есть способ получить коллекцию всех имен параметров.

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

Этот статический метод строит карту параметров из заданного 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 ("ключ")

Посмотрите на URLEncodedUtils

UrlQuerySanitizer добавлен в API level 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);
        }

Библиотека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