【问题标题】:Get parameter names collection from Java/Android url从 Java/Android url 获取参数名称集合
【发布时间】:2012-10-04 13:13:05
【问题描述】:

这很奇怪,但我找不到任何兼容返回完整参数列表的 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

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

【问题讨论】:

    标签: java android url parameters uri


    【解决方案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());
    }
    

    【讨论】:

    • 我收到编译时错误:URLEncodedUtils 类型中的方法 parse(HttpEntity) 不适用于参数 (URI)。
    • NameValuePair 折旧了然后我们用什么??
    【解决方案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).get("key")

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          鉴于这个 sn-p:

          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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-02-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-01
            • 2020-08-06
            • 2012-06-14
            • 2013-08-29
            相关资源
            最近更新 更多