这是非常奇怪的,但我找不到任何兼容的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
有没有人知道现成的解决方案?
答案 0 :(得分:12)
有办法获取所有参数名称。
String url = "http://domain.com/page?parameter1=value1¶meter2=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());
}