HttpURLConnection模拟登录学校的正方教务系统
教务系统登录界面
如图1-1

1-1
F12--》network查看登录教务系统需要参数:
__VIEWSTAT
txtUserName
TextBox2
txtSecretCode
RadioButtonList1
Button1
lbLanguage
hidPdrs
hidsc
如图1-2

1-2
或者登录之前开启wireshark也可捕获到登录系统时post的数据,使用"http.request.method==POST"过滤条件进行筛选
如图1-3
1-3
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern; /*
* Copyright (c) 2015
* technology co., LTD)
* All rights reserved.
*/
/**
* Description :
* <p/>
* <br><br>Time : 2015-11-10 上午11:13:13
*
* @author ZXL
* @version 1.0
* @since 1.0
*/
public class TeachingAffaiSystemLogin { //验证码url
//static String surl = "http://jwc.gduf.edu.cn/CheckCode.aspx";
private static String main_url = "http://jwc.gduf.edu.cn/default2.aspx";
private static String forword_url = "http://jwc.gduf.edu.cn/xs_main.aspx?xh=";
private static String responseCookie = "";
private static String __VIEWSTATE = "";
private static String txtUserName = "教务系统账号";
private static String TextBox2 = "教务系统密码";
private static String txtSecretCode = "";
private static String RadioButtonList1 = "学生";
private static String Button1 = "";
private static String lbLanguage = "";
private static String hidPdrs = "";
private static String hidsc = "";
private static URL url;
private static HttpURLConnection httpURLConn;
private static String imageName = "code";
public static void main(String[] args) {
// TODO Auto-generated method stub
doGet();
doPost();
} /**
* GET参数 __VIEWSTATE
* @param args
*/
private static void doGet(){
try {
//保存验证码图片
url = new URL(main_url);
httpURLConn = (HttpURLConnection)url.openConnection();
httpURLConn.setDoInput(true);
httpURLConn.setDoOutput(true); //拿到服务器随机生成的__VIEWSTATE
String line = null;
BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConn.getInputStream(),"GB2312")); String regEx = "<input.*type=\"hidden\".*name=\"__VIEWSTATE\".*value=\"(.*)\".*/>";
while ((line = br.readLine())!=null){
Pattern pat = Pattern.compile(regEx);
Matcher mat = pat.matcher(line);
boolean rs = mat.find();
if (rs==true){
System.out.println(mat.groupCount());
for(int i=1;i<=mat.groupCount();i++){
System.out.println(mat.group(i));
}
__VIEWSTATE = mat.group(1);
}
} } catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
* post参数登录到教务系统
* @param args
*/
private static void doPost(){
//post数据登录
try {
url = new URL(main_url); httpURLConn = (HttpURLConnection)url.openConnection();
httpURLConn.setDoInput(true);
httpURLConn.setDoOutput(true);
httpURLConn.setRequestProperty("contentType", "GB2312"); StringBuilder sb = new StringBuilder();
sb.append("__VIEWSTATE=" +URLEncoder.encode(__VIEWSTATE, "GB2312"));
sb.append("&txtUserName="+URLEncoder.encode(txtUserName, "GB2312"));
sb.append("&TextBox2="+URLEncoder.encode(TextBox2, "GB2312"));
sb.append("&txtSecretCode="+URLEncoder.encode(txtSecretCode, "GB2312"));
sb.append("&RadioButtonList1="+URLEncoder.encode(RadioButtonList1, "GB2312"));
sb.append("&Button1="+Button1);
sb.append("&lbLanguage="+lbLanguage);
sb.append("&hidPdrs="+hidPdrs);
sb.append("&hidsc="+hidsc);
httpURLConn.setRequestProperty("Content-Length",
String.valueOf(sb.toString().length()));
httpURLConn.setRequestProperty("Referer", main_url);
httpURLConn.setRequestMethod("POST"); httpURLConn.setRequestProperty("Cookie", responseCookie);
//不重定向
httpURLConn.setInstanceFollowRedirects(false); OutputStream os = httpURLConn.getOutputStream();
os.write(sb.toString().getBytes("GB2312"));
os.close(); //post之后返回的页面
BufferedReader bf = new BufferedReader(new InputStreamReader(httpURLConn.getInputStream(),"GB2312"));
String line1 = null;
while ((line1=bf.readLine())!=null){
System.out.println(line1);
} System.out.println("responseCode="+httpURLConn.getResponseCode());
System.out.println("重定向地址"+httpURLConn.getHeaderField("Location")); responseCookie = httpURLConn.getHeaderField("Set-Cookie");
System.out.println(responseCookie); //登录主界面
String line = null;
url = new URL(forword_url+URLEncoder.encode(txtUserName,"GB2312"));
httpURLConn = (HttpURLConnection)url.openConnection();
httpURLConn.setRequestProperty("Referer", forword_url+URLEncoder.encode(txtUserName,"GB2312"));
httpURLConn.setRequestProperty("Content-Type", "text/xml; charset=GB2312");
httpURLConn.setRequestProperty("Cookie", responseCookie);
httpURLConn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36");
httpURLConn.setRequestMethod("GET");
httpURLConn.setDoInput(true);
httpURLConn.setDoOutput(true); BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConn.getInputStream(),"GB2312"));
while ((line = br.readLine())!=null){
System.out.println(line);
}
}
catch (ProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
先get页面main_url,从返回页面获取到hidden的viewstate,连同其它参数一起post到main_url。

因为post到main_url之后,服务器端做了一个重定向处理,返回码为302,重定向页面为forword_url+“学号”(也可以在HttpURLConnection的getHeaderField("Location")获得)。
参考资料:http://www.blogfshare.com/php-curl-zhengfang.html
HttpURLConnection模拟登录学校的正方教务系统的更多相关文章
- Java模拟登录带验证码的教务系统(原理详解)
一:原理 客户端访问服务器,服务器通过Session对象记录会话,服务器可以指定一个唯一的session ID作为cookie来代表每个客户端,用来识别这个客户端接下来的请求. 我们通过Chrome浏 ...
- 在Android上模拟登录广工正方教务系统查询成绩
这是在博客园里开博以来写的第一篇博客. 因为之前看过很多人都有发过关于模拟登录正方软件获取数据的文章,自己觉得挺好玩的便也去动手一做,开始还以为挺难的,但实际做起来还蛮简单的,当然其中还有些小插曲. ...
- 广州商学院Python正方教务系统爬虫(获取个人信息成绩课表修改密码)
使用python的requests库简单爬取,使用xpath解析内容 可以获取个人信息.个人照片.成绩单和课表 github地址:https://github.com/PythonerKK/GZCC- ...
- JavaScript之正方教务系统自动化教评[插件-转载]
[声明]本插件系学院学长原创,非博主所创,发布此处,仅供学习和效仿. /** * @name:正方教务系统自动化教评-插件 * * @author:chenzhongshu * @date:2017- ...
- Golang模拟用户登陆,突破教务系统
目录 一.Golang模拟用户登陆,突破教务系统 1.1 请求登陆页面 1.2 抓包分析登陆请求 1.3 golang使用js引擎合成salt 1.4 模拟表单提交,完成登陆 1.5 进入成绩查询页, ...
- 以正方教务系统为例,用php模拟登陆抓取课表、空教室
课程格子和超级课程表这两个应用,想必大学生都很熟悉,使用自己的学号和教务系统的密码,就可以将自己的课表导入,随时随地都可以在手机上查看. 其实稍微了解一点php的话,我们也可以做一个类似这样的web ...
- HttpClient+Jsoup模拟登陆贺州学院教务系统,获取学生个人信息
前言 注:可能学校的教务系统已经做了升级,当前的程序不知道还能不能成功获取信息,加上已经毕业,我的账户已经被注销,试不了,在这里做下思路跟过程的记录. 在我的毕业设计中”基于SSM框架贺州学院校园二手 ...
- 课程助理For Windows(预览版,正方教务系统学生查分工具)
其实盖子已经开发了一个功能更强大的版本,但是那个版本依然基于正方系统,也就是说只要正方系统跪了或者张院士在网站上做点手脚,这个小工具就会失效. 今天给大家的版本虽然功能及其简单.界面极端丑陋,但是通过 ...
- 正方教务系统客户端 error loading midas.dll.
在windows xp/7/10上安装了客户端,安装到注册字体一步,没有响应,强行结束.启动客户端,登录,出现 error loading midas.dll. 32位:先将 midas.dll 放 ...
随机推荐
- Spring Boot 2.1.6 发布了!
Java技术栈 www.javastack.cn 优秀的Java技术公众号 最新消息: Spring Boot 2.1.6 昨天正式发布了,日常更新一些依赖和修复一些 BUG,没什么硬菜! 重点来了, ...
- Python面试题之“猴子补丁”(monkey patching)指的是什么?这种做法好吗?
“猴子补丁”就是指,在函数或对象已经定义之后,再去改变它们的行为. 举个例子: import datetime datetime.datetime.now = lambda: datetime.dat ...
- 菩提圣心诀---zabbix自定义key监控oracle连接状态(python脚本)
目的:此次实验目的是为了zabbix服务端能够实时监控某服务器上oracle实例能否正常连接 环境:1.zabbix_server 2.zabbix_agent(含有oracle) 主要知识点: 1. ...
- JS提示信息来检测相应id的标签
2015-07~2015-08 (其中$为document.getElementById()) 使用span提示信息来检测相应id的标签,没有返回值 infoTips("LRYH" ...
- 爬虫(十二):图形验证码的识别、滑动验证码的识别(B站滑动验证码)
1. 验证码识别 随着爬虫的发展,越来越多的网站开始采用各种各样的措施来反爬虫,其中一个措施便是使用验证码.随着技术的发展,验证码也越来越花里胡哨的了.最开始就是几个数字随机组成的图像验证码,后来加入 ...
- Codeforces Round #552:G. Minimum Possible LCM
官方题解是时间复杂度为O(nd)的.这里给出一个简单实现但是时间复杂度为O(NlogN) (N=1e7) 因为 a*b/gcd(a,b)=lcm(a,b) 所以我们可以枚举每一个因子,然后找到存在这个 ...
- rabbitmq AmqpClient 使用Topic 交换机投递与接收消息,C++代码示例
// strUri = "amqp://guest:guest@192.168.30.11:8820/test" // strUri = "amqp://[帐户名]:[密 ...
- PHP-在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值,返回 [ ...
- python 文件复制压缩
import os import time #这里是需要文件所在的位置 source=['"C:\\My Documents"',"C:\\Code"] #转换 ...
- shiro实现用户踢出功能
shiro实现用户踢出功能 KickoutSessionControlFilte import java.io.IOException; import java.io.PrintWriter; imp ...