2012-10-04 89 views
6

這很奇怪,但我找不到任何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 

有沒有人知道現成的解決方案?

+1

你可以分享你的代碼... –

回答

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

我收到編譯時錯誤:在類的方法解析(HttpEntity) URLEncodedUtils不適用於參數(URI)。 – Gem

+0

NameValuePair折舊,然後我們使用? –

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).get("key")

0

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

urllib庫WIL l解析查詢字符串參數並允許您以列表或地圖的形式訪問參數。如果可能有重複的鍵,請使用列表,否則地圖非常方便。

鑑於此片段:

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