如何使用httpUrlConnection获取URL的查询字符串,android

问题描述:

我正在使用HttpUrlConnection将查询发布到网页。该网页接受我的请求并进行另一个发布。例如:www.unknown.com如何使用httpUrlConnection获取URL的查询字符串,android

URL url = new URL("http://www.unknown.com"); //$NON-NLS-1$ 
urlConnection = (HttpURLConnection) url.openConnection(); 
urlConnection.setReadTimeout(15*1000); 
urlConnection.setDoInput(true); 
urlConnection.setDoOutput (true); 
urlConnection.setUseCaches (false); 
urlConnection.setAllowUserInteraction(true); 
out = new OutputStreamWriter(urlConnection.getOutputStream()); 
string content = "var1=5&var2=0&var3=6"; //$NON-NLS-1$ 
out.write(content); 
out.flush(); 
out.close(); 

该代码工作没有问题,我得到的HTML代码。问题在于,网页在接受我的请求时正在执行另一个HTTP“POST”方法。例如,在我的请求后,URI是:http://www.unknown.com?var1=5&var2=0&var3=6&var4=1500

我需要在代码中获取“var4”的值,并且找不到任何解决方案。 HttpUrlConnection.getUrl()只返回地址http://www.unknown.com!有没有人提出建议?谢谢。

如何使用“getQuery()”来检索查询字符串。

String query = url.getQuery(); 

这会给你这个URL的查询部分。

使用StringTokenizer分隔参数。 (您将必须应用两次StringTokenizer。)

首先从查询字符串中获取用“&”分隔的令牌。这将返回“val1 = 5”,“val4 = 1500”等。

对上述令牌再次应用StrinTokenizer。这次检索由“=”分隔的令牌。 现在迭代通过这个,第一个标记将是参数名称“val4”,第二个标记将是值“1500”。

StringTokenizer st = new StringTokenizer(query,"&",false); //query is from getQuery() 
while (st.hasMoreElements()) 
{ // First Pass to retrive the "parametername=value" combo 

    String paramValueToken = st.nextElement().toString(); 

    StringTokenizer stParamVal = new StringTokenizer(paramValueToken, "=", false); 

    int i = 0; 
    while (stParamVal.hasMoreElements()) 
    { 
     //Second pass to separate the "paramname" and "value". 
     // 1st token is param name 
     // 2nd token is param value 


     String separatedToken = stParamVal.nextElement().toString(); 

     if(i== 0) 
     { 
      //This indicates that it is the param name : ex val4,val5 etc 
      String paramName = separatedToken; 
     } 
     else 
     { 
      // This will hold value of the parameter 
      String paramValue = separatedToken; 
     } 
     i++; 
    } 
} 

URL getQuery() API Documentation

http://download.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html

+0

不,我不使用的Servlet/JSP。这是一个android应用程序,我不确定是否可以在android应用程序中使用JSP。 – Govan 2011-03-27 14:34:40

+0

@Govan编辑了我的答案。使用不同的方法使用URL API和Strintokenizer检索查询参数。 – 2011-03-27 15:08:42

+0

感谢您的关心。我在调试代码时检查了URL和quey。正如我所说,当我发送我的请求时,该网页正在处理它自己的HTTP-post。 “Var4”不与我正在发送的查询字符串。服务器正在完成其发布并将var4添加到查询字符串。当我调试代码时,URL的查询部分在请求后没有包含“Var4”。我想getQuery()返回URL中的那个部分。换句话说,我得到正确的HTML页面,但我没有得到正确的URL。 – Govan 2011-03-28 11:18:39