JSOUP登录和解析

时间:2015-08-16 16:10:03

标签: jsoup

我需要从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();

1 个答案:

答案 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以及所有隐藏的输入。为自己做实验。这应该足以帮助您掌握这个想法。实际编码是你的工作,对吗?