我需要从tab获取数据库大小值。网址:http://www.try-phpbb.com/31x/ucp.php?mode=login为此,我需要登录两次。甚至不能立刻做到这一点。
尝试这样的事情但没有成功:
Connection.Response res = Jsoup
.connect("http://www.try-phpbb.com/31x/ucp.php?mode=login")
.data("username", "administrator")
.data("password", "administrator")
.method(Connection.Method.POST)
.execute();
答案 0 :(得分:1)
我猜您需要更多信息,然后只需要用户名和密码即可在表单中发送。在网站的html中看一下,登录表单还包含一些隐藏字段,包括名为sid
的输入。这似乎是服务器生成的id,因此您需要先获取登录页面,读取此sid(以及可能的会话cookie)并将其与您的发布请求一起发送。这应该可以解决问题。
1)获取登录页面
2)读取cookie,读出sid。查看Chrome中的网络标签,表明该网站设置了以下Cookie:
phpbb3_ascraeus_90541803_u=1;
phpbb3_ascraeus_90541803_k=;
phpbb3_ascraeus_90541803_sid=befc4716f8061a422407f4f77207e2a8
在Joup中你可以像这样访问cookie:
Connection.Response res = Jsoup.connect("http://www.try-phpbb.com/31x/ucp.php?mode=login")
.execute();
String phpbb3_ascraeus_90541803_sid = res.cookie("phpbb3_ascraeus_90541803_sid");
String rawHTML = res.body();
Document doc = Jsoup.parse(rawHTML);
String sid = doc.select("input[name=sid]").first().attr("value");
3)使用cookie,用户名,密码和sid表单字段生成POST请求。像这样:
Connection.Response res = Jsoup
.connect("http://www.try-phpbb.com/31x/ucp.php?mode=login")
.data("username", "administrator")
.data("password", "administrator")
.data("sid", "sid")
.cookie("phpbb3_ascraeus_90541803_sid", phpbb3_ascraeus_90541803_sid)
.method(Connection.Method.POST)
.execute();
请注意,我没有测试过这个。您可能需要也可能不需要cookie。也许您需要所有cookie以及所有隐藏的输入。为自己做实验。这应该足以帮助您掌握这个想法。实际编码是你的工作,对吗?