我正在尝试使用此登录。
res = Jsoup.connect("http://www.registru.liceu.asm.md/elev/login.php?user=Vozian_Valentin")
.data("pass", "DyXnyU")
.data("class","Clasa11B")
.data("submit","log in")
.method(Method.POST)
.execute();
当我调用 res.parse().outerHtml()
时,它会显示与成功登录页面或不正确登录页面不同的内容,如果我将密码更改为不正确,则会显示不正确的登录页面。
最佳答案
登录后,服务器会返回带有 Refresh
元标记的 HTML 页面。
由于 Jsoup 是一个 HTML 解析器,它无法自动处理这种重定向。必须告诉它这样做。
具体操作方法如下:
private static final String UA_STRING = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1";
private static final String REFRESH_URL = "refresh-url";
private String loginFormUrl = "http://www.registru.liceu.asm.md/elev/login.php?user=Vozian_Valentin";
// Go to login form page
Response res = Jsoup.connect(loginFormUrl) //
.userAgent(UA_STRING) //
.data("pass", "DyXnyU") //
.data("class","Clasa11B") //
.data("submit","log in") //
.method(Method.POST) //
.execute();
// Extract the Refresh meta tag from server response
Element meta = res.parse().select("meta[http-equiv=Refresh]").first();
if (meta==null) {
throw new RuntimeException("Unable to locate Refresh meta tag...");
}
// Determine the refresh url from the meta tag
String content = meta.attr("content");
meta.attr(REFRESH_URL, content.replaceAll("(?i)^(\\d+;.+URL=)(.+)$", "$2"));
// Go to refresh url
Response res2 = Jsoup //
.connect(meta.absUrl(REFRESH_URL)) //
.userAgent(UA_STRING) //
.referrer(loginFormUrl) //
.method(Method.GET) //
.cookies(res.cookies()) //
.execute();
// Get the successfully logged page
System.out.println(res2.parse().outerHtml());
关于java - 如何使用 Jsoup 登录网站(元刷新)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36988578/