我知道有很多信息,但我找不到任何适合我的问题.我想从我需要登录的页面收集数据.这是我正在尝试做的事情:
我收集Cookies做:
Connection.Response res = Jsoup
.connect("http://website.com/login?event=doLogin")
.execute();
Map <String,String> cookies = res.cookies();
Run Code Online (Sandbox Code Playgroud)
然后阅读html中的隐藏值:
Document doc = Jsoup
.connect("http://website.com/login?event=doLogin")
.cookies(cookies)
.get();
html = doc.toString();
length = html.length();
counter = 0;
for (int i = 0; i < length; i++) {
if (html.startsWith("document.write", i)){
name[counter] = html.substring(i + 41, i + 144);
value[counter] = "Login";
counter++;
}
if (html.startsWith("hidden", i)) {
name[counter] = html.substring(i + 13, i + 81);
value[counter] = html.substring(i + 90, i + 123);
counter++;
}
}
Run Code Online (Sandbox Code Playgroud)
最后,我想使用此信息使用Cookie和隐藏值进行登录:
Document doc2 = Jsoup
.connect("http://website.com/login?event=doLogin")
.cookies(cookies)
.data("email", "my@email")
.data("pass", "mypass")
.data(name[0], value[0])
.data(name[1], value[1])
.data(name[2], value[2])
.method(Connection.Method.POST)
.get();
System.out.println(doc2);
Run Code Online (Sandbox Code Playgroud)
但我得到的只是登录页面.我担心当我尝试时可以改变这些隐藏的值:
Document doc2 = Jsoup.connect
Run Code Online (Sandbox Code Playgroud)
我做得对吗?
当你将方法设置为POST然后调用GET请求时,它就是一种混合上下文.试试这个:
Connection.Response res = Jsoup.connect("http://website.com/login?event=doLogin")
.execute();
...
Document doc = Jsoup.connect("http://website.com/login?event=doLogin")
.cookies(res.cookies())
.data("email", "my@email")
.data("pass", "mypass")
.data(name[0], value[0])
.data(name[1], value[1])
.data(name[2], value[2])
.post();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3868 次 |
| 最近记录: |