java - 如何使用 Jsoup 登录网站(元刷新)?

标签 java android http jsoup

我正在尝试使用此登录。

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/

相关文章:

android - 可以在我自己的服务器上使用 quickblox 吗?

android - VoiceInteractionService 如何工作?

node.js - Node HTTP 服务器的最大性能?

运行 Hadoop Map Reducer 时发生 Java 编译错误

java TCP套接字消息中断

Java Mybatis 多条更新语句

android - 如何正确地将变量放入 url 中。改造2.0

使用 SSL 时不再存储 PHP session

http - Ionic 2 - Angular 2 http header 未随请求一起发送

java - 在 tomcat 5 上部署 war 提示文件是目录