【问题标题】:How to get a query string for a url using httpUrlConnection , android如何使用 httpUrlConnection 获取 url 的查询字符串,android
【发布时间】:2011-03-27 13:58:46
【问题描述】:

我正在使用 HttpUrlConnection 向网页发布查询。该网页接受了我的请求并再次发布。例如:www.unknown.com

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!有人建议吗?谢谢。

【问题讨论】:

    标签: java android http-post httpurlconnection


    【解决方案1】:

    如何使用“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

    【讨论】:

    • 不,我没有使用 Servlets/JSP。这是一个 android 应用程序,我不确定是否可以在 android 应用程序中使用 JSP。
    • @Govan 编辑了我的答案。使用不同的方法来检索使用 URL API 和 Strintokenizer 的查询参数。
    • 感谢您的关心。我在调试代码时检查了 url 和 quey。正如我所说,当我发送请求时,网页正在处理自己的 HTTP-post。 “Var4”不是我发送的查询字符串。服务器正在发布并将 var4 添加到查询字符串。当我调试代码时,请求后 URL 的查询部分不包含“Var4”。我猜 getQuery() 在 URL 中返回该部分。换句话说,我得到了正确的 HTML 页面,但没有得到正确的 URL。
    • @Govan 每个请求只对调用的第一页有效,查询字符串不会自动传递到第二页。如果您需要第二页中的参数,请在中重新创建查询字符串并再次传递。
    • 这是问题所在,我在示例中没有“Var4”的值,因此无法重新创建查询字符串。也许我应该这样问我的问题:有没有办法获取网页生成的查询字符串?响应是正文,但我如何获取 URL?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2012-04-09
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    相关资源
    最近更新 更多