文档章节

使用 jsoup 模拟登录 urp 教务系统

大灰狼时间
 大灰狼时间
发布于 06/24 22:48
字数 556
阅读 47
收藏 0

需要的 jsoup 相关 jar包:https://www.lanzous.com/i1abckj

1、首先打开教务系统的登录页面,F12 开启浏览器调试,注意一下 Request Headers 一栏的 Cookie 选项,我们一会需要拿这个 Cookie 去提交登录请求,否则会提示:请登录 或者 出现错误。

2、输入账号密码后点击登录,可以看到请求提交过程以及 FormData 发送的数据:

这个 loginAction.do 就是要提交验证的地址

3、下面写代码:

public class Test {
	
    //下面的 Url 请求就是通过浏览器调试中 Network 一栏获取到的,需要多多调试

	//基本 Url
	private static String baseUrl = "http://202.206.161.174:9080/";
	//分数查询 Url
	private static String scoreUrl = baseUrl + "gradeLnAllAction.do?type=ln&oper=fainfo&fajhh=5325";
    //课表查询 Url
	private static String courseUrl = baseUrl + "xkAction.do?actionType=6";
	//学籍信息 Url
	private static String userInfoUrl = baseUrl + "xjInfoAction.do?oper=xjxx";
	//注销 Url
	private static String logoutUrl = baseUrl + "logout.do";
	//session 的键
    //Cookie 的格式:Cookie : JSESSIONID=******,那么 sessionId 就是等号后面的一串字符,提交请求携带这个参数的值即可
	private static String sessionName = "JSESSIONID";
	
	public static void main(String[] args) {
		try {
            //获取 Cookie
			Connection.Response res = Jsoup.connect(baseUrl)
					.method(Method.GET)
					.execute();
			String sessionId = res.cookie(sessionName);
			System.err.println(sessionId);
			
            //登录请求提交
			Connection.Response login = Jsoup.connect(baseUrl + "loginAction.do")
					.header("Cookie", sessionName + "=" + sessionId)  //携带刚才的 Cookie 信息
					.data("zjh", "账号", "mm", "密码")
                    //这里的 zjh 和 mm 就是登录页面 form 表单的 name
					.method(Method.POST)
					.execute();
			
            //此时 sessionId 为可用状态
			Document scoreDoc = Jsoup.connect(scoreUrl).cookie(sessionName, sessionId).get();
			System.err.println(scoreDoc);
			
			System.err.println("-------------------");
			
            //注销请求
			Document logoutDoc = Jsoup.connect(logoutUrl).cookie(sessionName, sessionId).post();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}

    4、运行部分截图:

    上图中已经返回了 html 信息,这里只截取了一部分。demo 基本完成了。

    代码不算难,但是思路要注意:起初的思路是先执行登录请求,然后获取到 Cookie 后再获取数据,但是总是出现 “用户未登录” 类似的提示,思路改正为上面的即可。

参考:https://blog.csdn.net/npf_java/article/details/49094245

初学,欢迎批评指正。

© 著作权归作者所有

大灰狼时间
粉丝 1
博文 32
码字总数 6139
作品 0
邯郸
程序员
私信 提问
Java执行JavaScript脚本破解encodeInp()加密

一:背景 在模拟登录某网站时遇到了用户名和密码被JS进行加密提交的问题,如图: 二:解决方法 conwork.js Methods.java 注意:Js文件在实例中默认保存在项目源文件夹下 更多推荐: Jsoup模拟...

巅峰小学生
02/10
0
0
Android 通过Volley 模拟登录教务系统 出错,出错原因:系统正忙

我想做一个Android端教务系统,通过Volley发送请求。 思路为:1.获取并存储cookie 2.保存网页的__VIEWSTATE值 3.头信息中带上cookie,下载验证码 4.设置头信息post数据 预期是302重定向到首页...

汪汪汪汪汪
2016/05/26
368
3
Jsoup模拟登录带验证码的教务系统(原理详解)

一:原理 客户端访问服务器,服务器通过Session对象记录会话,服务器可以指定一个唯一的session ID作为cookie来代表每个客户端,用来识别这个客户端接下来的请求。 我们通过Chrome浏览器进行...

巅峰小学生
02/09
0
0
关于httpclient模拟登录的问题

初学httpclinet没多久 研究了官网的API然后上网找了些例子 然后常识登录自己学校的教务系统 但是老是出错: 我想问得是表单除了网页表面给的账户,密码等信息外还有其他的隐藏的吗?(之前看到...

_Holmes
2014/01/11
264
6
python模拟登录验证码的问题

我今天尝试使用python模拟登录,首先我将验证码的图片地址打开,得到新的图片,但是输入之后会弹出验证码不正确的提示,于是我打开firebug去 调试,然后使用firebug去放在src上的时候,显示出...

funCar
2015/05/23
803
3

没有更多内容

加载失败,请刷新页面

加载更多

mybatis学习(1)

JDBC连接方式: 1.底层没有使用连接池,操作数据库需要频繁的创建和关闭连接,消耗资源。 2.写原生的JDBC代码在JAVA中,一旦需要修改SQL的话(比如表增加字段),JAVA需要整体重新编译,不利...

杨健-YJ
19分钟前
0
0
怎么组织文档

可以从以下几个方面考虑组织文档: ☐ 各种分支的界面截图和对应的类及文件 ☐ 框架或类图 ☐ 流程图 ☐ 时序图 ☐ 注意事项

-___-
30分钟前
1
0
分布式之数据库和缓存双写一致性方案解析

引言 为什么写这篇文章? 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。 但是在更新缓存方面,对于更...

别打我会飞
33分钟前
5
0
我的oracle11G,12c OCM之路

ocm认证感悟 ---------------------- 距离拿到ocm证书已经过了1年的时间,当初拿到证书的心情到现在还记得。其实在每个DBA心里都有一个成为强者的梦想,需要被认可,我也一样。我干过开发,做...

hnairdb
33分钟前
1
1
手动部署kubernetes集群(1.13.1最新版)

一、机器规划 使用五台机子部署k8s集群,规划如下: master节点3台(同时也是etcd节点) node节点2台 ip分配如下: ip:192.168.10.101,主机名:k8s-etcd01 ip:192.168.10.102,主机名:k8s...

人在艹木中
38分钟前
28
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部