Android - 使用DefaultHttpClient获取html页面的隐藏输入值

时间:2014-05-05 10:31:54

标签: android html regex session hidden

I already asked a similar question before,但未提供足够的详细信息。所以这是“相同”的问题,但这次更深入。

我有一个带有html的网页,在该网页的某个地方我有:<input name="__RequestVerificationToken" type="hidden" value="the_value_I_want" />

所以,我的问题是:如何使用已打开的DefaultHttpClient连接的获取Android中hidden text field的值,

我目前的代码:

// Method to get the hidden-input value of the Token
private String getToken(){
    String url = "http://myhost/Account/Login";
    String hidden_token = "";
    String response = "";

    HttpGet get = new HttpGet(url);
    try{
        // Send the GET-request
        HttpResponse execute = MainActivity.HttpClient.execute(get);

        // Get the response of the GET-request
        InputStream content = execute.getEntity().getContent();
        BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
        String s = "";
        while((s = buffer.readLine()) != null)
            response += s;

        content.close();
        buffer.close();

        // Get the value of the hidden input-field with the name __RequestVerificationToken
        // TODO
    }
    catch(Exception ex){
        ex.printStackTrace();
    }

    return hidden_token;
}

那么,我应该在TODO线上添加什么?

因为TokenCookie只有在Session保持打开状态时才会保留,所以我无法使用Jsoup library来查找隐藏字段(我做过通过使用下面的代码)。相反,我需要使用已经打开的DefaultHttpClient

Jsoup代码:

Document doc = Jsoup.connect(url).get(); // <- this opens a new session
org.jsoup.nodes.Element el = doc.select("input[name*=" + TOKEN).first();
hidden_token = el.attr("value");

提前感谢您的回复。

PS:对于那些想知道的人:我需要这个令牌才能使用POST-request的Google帐户登录,并结合我token获得的Cookie

1 个答案:

答案 0 :(得分:0)

好的,幸运的是,这很简单。我刚刚用Document doc = Jsoup.connect(url).get();

替换了Document doc = Jsoup.parse(html);

因此,在主要帖子的代码中,我将//TODO替换为:

Document doc = Jsoup.parse(response);
org.jsoup.nodes.Element el = doc.select("input[name*=" + TOKEN).first();
hidden_token = el.attr("value");

编辑1:

我认为这样做了,但它没有......它仍然认为有两个不同的Sessions被打开..:S

Jsoup.parse(...)在幕后打开一个新的Jsoup.get-session吗?


编辑2:

情况更糟..每次在网站上打开另一个页面时,都会创建另一个会话,因此需要另一个令牌。所以我需要与网站的创建者/ web api讨论一些事情。混合并解决一些问题。也许只为Web API创建一个不同的登录..

总而言之,我现在有点沮丧,即使我遇到的所有问题都已解决了#34; ..