jsoup 模拟登陆github网页(源代码)亲测可用 直接复制就能用

参考博文:https://blog.csdn.net/dietime1943/article/details/73294442

全部代码:

  1 package Pa;
  2 import java.util.HashMap;
  3 import java.util.List;
  4 import java.util.Map;
  5 
  6 import org.jsoup.Connection;
  7 import org.jsoup.Jsoup;
  8 import org.jsoup.Connection.Method;
  9 import org.jsoup.Connection.Response;
 10 import org.jsoup.nodes.Document;
 11 import org.jsoup.nodes.Element;
 12 
 13 import page.SslUtils;
 14 
 15 /**
 16 
 17  * @since      crawler(datasnatch) version(1.0)</br>
 18 
 19  * @author     bluetata / sekito.lv@gmail.com</br>
 20 
 21  * @reference  http://bluetata.blog.csdn.net/</br>
 22 
 23  * @version    1.0</br>
 24 
 25  * @update     03/14/2019 16:00
 26 
 27  */
 28 
 29 public class jsoup模拟登陆 {
 30 
 31     public static String LOGIN_URL = "https://github.com/login";
 32     public static String USER_AGENT = "User-Agent";
 33     public static String USER_AGENT_VALUE = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0";
 34 
 35     public static void main(String[] args) throws Exception {
 36          try {
 37                 SslUtils.ignoreSsl();
 38             } catch (Exception e) {
 39                 e.printStackTrace();
 40             }
 41         simulateLogin("你的用户名", "你的密码"); // 模拟登陆github的用户名和密码
 42     }
 43   /**
 44 
 45      * @param userName 用户名
 46 
 47      * @param pwd 密码
 48 
 49      * @throws Exception
 50 
 51      */
 52 
 53     public static void simulateLogin(String userName, String pwd) throws Exception {
 54         /* 
 55          * 第一次请求 
 56          * grab login form page first
 57          * 获取登陆提交的表单信息,及修改其提交data数据(login,password)
 58          */
 59         // get the response, which we will post to the action URL(rs.cookies())
 60         Connection con = Jsoup.connect(LOGIN_URL);  // 获取connection
 61         con.header(USER_AGENT, USER_AGENT_VALUE);   // 配置模拟浏览器
 62         Response rs = con.execute();                // 获取响应
 63         Document d1 = Jsoup.parse(rs.body());       // 转换为Dom树
 64         System.out.println(d1);
 65 
 66         List<Element> eleList = d1.select("form");  // 获取提交form表单,可以通过查看页面源码代码得知
 67 
 68         // 获取cooking和表单属性
 69         // lets make data map containing all the parameters and its values found in the form
 70         Map<String, String> datas = new HashMap<>();
 71 
 72         // 01/24/2019 17:45 bluetata 更新 -------------------------------------------------------------- Start ----------
 73 
 74         // GitHub多次改版更新,最新的提交request data为:
 75         // authenticity_token   ll0RJnG1f9XDAaN1DxnyTDzCs+YXweEZWel9kGkq8TvXH83HjCwPG048sJ/VVjDA94YmbF0qvUgcJx8/IKlP8Q==
 76         // commit  Sign+in
 77         // login   bluetata
 78         // password    password123
 79         // utf8    ✓
 80 
 81         for(int i = 0; i < eleList.size(); i++) {
 82 
 83             for (Element e : eleList.get(i).getAllElements()) {
 84                 // 设置用户名
 85                 if (e.attr("name").equals("login")) {
 86                     e.attr("value", userName);
 87                 }
 88 
 89                 // 设置用户密码
 90 
 91                 if (e.attr("name").equals("password")) {
 92                     e.attr("value", pwd);
 93                 }
 94 
 95                 // 排除空值表单属性
 96                 if (e.attr("name").length() > 0) {
 97                     datas.put(e.attr("name"), e.attr("value"));
 98                 }
 99             }
100         }
101 
102 
103 //      旧逻辑  delete  01/24/2019 17:49 bluetata --------------------------------------------start
104 //        for (Element e : eleList.get(0).getAllElements()) {
105 //            // 设置用户名
106 //            if (e.attr("name").equals("login")) {
107 //                e.attr("value", userName);
108 //            }
109 //            // 设置用户密码
110 //            if (e.attr("name").equals("password")) {
111 //                e.attr("value", pwd);
112 //            }
113 //            // 排除空值表单属性
114 //            if (e.attr("name").length() > 0) {
115 //                datas.put(e.attr("name"), e.attr("value"));
116 //            }
117 //        }
118 //      旧逻辑  delete  01/24/2019 17:49 bluetata --------------------------------------------end
119         // 01/24/2019 17:45 bluetata 更新 --------------------------------------------------------------- End -----------
120         /*
121          * 第二次请求,以post方式提交表单数据以及cookie信息
122          */
123 
124         Connection con2 = Jsoup.connect("https://github.com/session");
125         con2.header(USER_AGENT, USER_AGENT_VALUE);
126         // 设置cookie和post上面的map数据
127         Response login = con2.ignoreContentType(true).followRedirects(true).method(Method.POST).data(datas).cookies(rs.cookies()).execute();
128         // 打印,登陆成功后的信息
129         System.out.println(login.body());
130         // 登陆成功后的cookie信息,可以保存到本地,以后登陆时,只需一次登陆即可
131         Map<String, String> map = login.cookies();
132         for (String s : map.keySet()) {
133             System.out.println(s + " : " + map.get(s));
134         }
135 
136     }
137 
138  
139 
140 }

 

posted @ 2020-02-05 17:22  博二爷  阅读(669)  评论(0编辑  收藏  举报