Java 如何使用Jsoup登录我的大学网站?

Java 如何使用Jsoup登录我的大学网站?,java,http,cookies,jsoup,Java,Http,Cookies,Jsoup,我正在尝试开发一款Android应用程序,它需要一些大学内部网站上的信息。我一直在尝试使用Jsoup以编程方式登录网站。以下是我现在掌握的代码: import org.jsoup.Connection; import org.jsoup.Connection.Method; import org.jsoup.Jsoup; //import org.jsoup.helper.Validate; import org.jsoup.nodes.Document; import org.jsoup.no

我正在尝试开发一款Android应用程序,它需要一些大学内部网站上的信息。我一直在尝试使用Jsoup以编程方式登录网站。以下是我现在掌握的代码:

import org.jsoup.Connection;
import org.jsoup.Connection.Method;
import org.jsoup.Jsoup;
//import org.jsoup.helper.Validate;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
//import org.jsoup.select.Elements;


import java.io.IOException;
import java.util.Map;

public class Test {
    public static void main(String[] args) {
        Document doc;
        try {
            Connection.Response res = Jsoup
                    .connect(
                            "https://sso.bris.ac.uk/sso/login?service=https%3A%2F%2Fwww.cs.bris.ac.uk%2FTeaching%2Fsecure%2Funit-list.jsp%3Flist%3Dmine")
                    .execute();
            Map<String, String> cookies = res.cookies();
            System.out.println(cookies.keySet());
            Document fakepage = res.parse();
            Element fakelt = fakepage.select("input[name=lt]").get(0);
            Element fakeexecution = fakepage.select("input[name=execution]")
                    .get(0);
            Element fake_eventID = fakepage.select("input[name=_eventId]").get(
                    0);
            System.out.println("Hello World!");
            System.out.println(fakelt.attr("value"));
            System.out.println(fakeexecution.toString());
            System.out.println(fake_eventID.toString());
//          System.out.println(cookies.get("JSESSIONID"));
            String url="https://sso.bris.ac.uk/sso/login?service=https%3A%2F%2Fwww.cs.bris.ac.uk%2FTeaching%2Fsecure%2Funit-list.jsp%3Flist%3Dmine";
            System.out.println(url);
            Connection newreq = Jsoup
                    .connect(url)
                    .cookies(cookies).data("lt", fakelt.attr("value")).followRedirects(true).header("Connection", "keep-alive")
                    .header("Refer", " https://sso.bris.ac.uk/sso/login?service=https%3A%2F%2Fwww.cs.bris.ac.uk%2FTeaching%2Fsecure%2Funit-list.jsp%3Flist%3Dmine")
                    .header("Content-Type","application/x-www-form-urlencoded;charset=UTF-8")
                    .userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:27.0) Gecko/20100101 Firefox/27.0")
                    .data("lt",fakelt.attr("value"))
                    .data("execution", fakeexecution.attr("value"))
                    .data("_eventID", fake_eventID.attr("value"))
                    .data("username", "aabbcc").data("password", "ddeeff")
                    .data("submit", "").method(Method.POST);
            Connection.Response newres = newreq.execute();
            doc = newres.parse();
            System.out.println(doc.toString());
            System.out.println(newres.statusCode());


        Map<String,String> newcookies = newres.cookies();
        doc = Jsoup.connect("https://www.cs.bris.ac.uk/Teaching/secure/unit-list.jsp?list=mine").cookies(newcookies).get();
        System.out.println(doc.toString());
//          System.out.println(doc.toString());
        } catch (IOException e) {
            System.out.println("Excepiton:");
            System.out.println(e.getMessage());
        }
    }
}
import org.jsoup.Connection;
导入org.jsoup.Connection.Method;
导入org.jsoup.jsoup;
//导入org.jsoup.helper.Validate;
导入org.jsoup.nodes.Document;
导入org.jsoup.nodes.Element;
//导入org.jsoup.select.Elements;
导入java.io.IOException;
导入java.util.Map;
公开课考试{
公共静态void main(字符串[]args){
文件文件;
试一试{
Connection.Response res=Jsoup
.连接(
"https://sso.bris.ac.uk/sso/login?service=https%3A%2F%2Fwww.cs.bris.ac.uk%2FTeaching%2Fsecure%2Funit-jsp%3Flist%3Dmine”)
.execute();
映射cookies=res.cookies();
System.out.println(cookies.keySet());
Document fakepage=res.parse();
元素fakelt=fakepage.select(“输入[name=lt]”)。获取(0);
元素fakeexecution=fakepage.select(“输入[名称=执行]”)
.get(0);
元素fake\u eventID=fakepage.select(“input[name=\u eventID]”)。获取(
0);
System.out.println(“你好,世界!”);
System.out.println(fakelt.attr(“值”));
System.out.println(fakeexecution.toString());
System.out.println(fake_eventID.toString());
//System.out.println(cookies.get(“JSESSIONID”);
字符串url=”https://sso.bris.ac.uk/sso/login?service=https%3A%2F%2Fwww.cs.bris.ac.uk%2FTeaching%2Fsecure%2Funit-jsp%3Flist%3Dmine”;
System.out.println(url);
连接newreq=Jsoup
.connect(url)
.cookies(cookies).data(“lt”,fakelt.attr(“value”)).followRedirects(true).头文件(“连接”,“保持活动”)
.标题(“参考”https://sso.bris.ac.uk/sso/login?service=https%3A%2F%2Fwww.cs.bris.ac.uk%2FTeaching%2Fsecure%2Funit-jsp%3Flist%3Dmine”)
.header(“内容类型”,“应用程序/x-www-form-urlencoded;字符集=UTF-8”)
.userAgent(“Mozilla/5.0(Macintosh;英特尔Mac OS X 10.9;rv:27.0)Gecko/20100101 Firefox/27.0”)
.data(“lt”,fakelt.attr(“值”))
.data(“执行”,fakeexecution.attr(“值”))
.data(“\u eventID”,伪\u eventID.attr(“值”))
.数据(“用户名”、“aabbcc”).数据(“密码”、“ddeeff”)
。数据(“提交”、“提交”)。方法(方法。发布);
Connection.Response newres=newreq.execute();
doc=newres.parse();
System.out.println(doc.toString());
System.out.println(newres.statusCode());
Map newcookies=newres.cookies();
doc=Jsoup.connect(“https://www.cs.bris.ac.uk/Teaching/secure/unit-list.jsp?list=mine“”.cookies(newcookies.get();
System.out.println(doc.toString());
//System.out.println(doc.toString());
}捕获(IOE异常){
System.out.println(“例外:”);
System.out.println(e.getMessage());
}
}
}

我完全伪造了一个表单来提交use Jsoup,为了绕过安全cookies,我先请求一次网站,然后使用它发送给我的cookies再次请求网站。表单有一些隐藏的字段,所以当我再次请求时,我使用第一次请求时得到的字段来伪造它。然而,这不起作用。有可能这样做吗?或者服务器有一些高级的防止程序来阻止我这样做?

不要使用Jsoup来做这件事,它需要你自己处理所有的cookies,相反,使用Httpclient,如果你使用4.0以后的版本,它会自动处理cookies。有很多用户需要使用。

我不这么认为,因为首先我有访问网站所需的凭据,只有我想不使用浏览器访问它。第二,我这样做的目的是帮助创建一个应用程序,使网站更容易访问,而不是使其腐败或窃取信息。第三,这不是一个黑客攻击,这只是作为一个工作周围。我可以开罚单,等待IT人员创建API供我们使用,但这需要更长的时间。这不是恶意的。我道歉并收回我的-1票。我只想说谢谢你的理解:)