I already asked a similar question before,但未提供足够的详细信息。所以这是“相同”的问题,但这次更深入。
我有一个带有html的网页,在该网页的某个地方我有:<input name="__RequestVerificationToken" type="hidden" value="the_value_I_want" />
所以,我的问题是:如何使用已打开的DefaultHttpClient连接的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线上添加什么?
因为Token
和Cookie
只有在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
答案 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; ..