如何使用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
不,我不使用的Servlet/JSP。这是一个android应用程序,我不确定是否可以在android应用程序中使用JSP。 – Govan 2011-03-27 14:34:40
@Govan编辑了我的答案。使用不同的方法使用URL API和Strintokenizer检索查询参数。 – 2011-03-27 15:08:42
感谢您的关心。我在调试代码时检查了URL和quey。正如我所说,当我发送我的请求时,该网页正在处理它自己的HTTP-post。 “Var4”不与我正在发送的查询字符串。服务器正在完成其发布并将var4添加到查询字符串。当我调试代码时,URL的查询部分在请求后没有包含“Var4”。我想getQuery()返回URL中的那个部分。换句话说,我得到正确的HTML页面,但我没有得到正确的URL。 – Govan 2011-03-28 11:18:39