教务系统登录界面

  如图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模拟登录学校的正方教务系统的更多相关文章

  1. Java模拟登录带验证码的教务系统(原理详解)

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

  2. 在Android上模拟登录广工正方教务系统查询成绩

    这是在博客园里开博以来写的第一篇博客. 因为之前看过很多人都有发过关于模拟登录正方软件获取数据的文章,自己觉得挺好玩的便也去动手一做,开始还以为挺难的,但实际做起来还蛮简单的,当然其中还有些小插曲. ...

  3. 广州商学院Python正方教务系统爬虫(获取个人信息成绩课表修改密码)

    使用python的requests库简单爬取,使用xpath解析内容 可以获取个人信息.个人照片.成绩单和课表 github地址:https://github.com/PythonerKK/GZCC- ...

  4. JavaScript之正方教务系统自动化教评[插件-转载]

    [声明]本插件系学院学长原创,非博主所创,发布此处,仅供学习和效仿. /** * @name:正方教务系统自动化教评-插件 * * @author:chenzhongshu * @date:2017- ...

  5. Golang模拟用户登陆,突破教务系统

    目录 一.Golang模拟用户登陆,突破教务系统 1.1 请求登陆页面 1.2 抓包分析登陆请求 1.3 golang使用js引擎合成salt 1.4 模拟表单提交,完成登陆 1.5 进入成绩查询页, ...

  6. 以正方教务系统为例,用php模拟登陆抓取课表、空教室

    课程格子和超级课程表这两个应用,想必大学生都很熟悉,使用自己的学号和教务系统的密码,就可以将自己的课表导入,随时随地都可以在手机上查看. 其实稍微了解一点php的话,我们也可以做一个类似这样的web ...

  7. HttpClient+Jsoup模拟登陆贺州学院教务系统,获取学生个人信息

    前言 注:可能学校的教务系统已经做了升级,当前的程序不知道还能不能成功获取信息,加上已经毕业,我的账户已经被注销,试不了,在这里做下思路跟过程的记录. 在我的毕业设计中”基于SSM框架贺州学院校园二手 ...

  8. 课程助理For Windows(预览版,正方教务系统学生查分工具)

    其实盖子已经开发了一个功能更强大的版本,但是那个版本依然基于正方系统,也就是说只要正方系统跪了或者张院士在网站上做点手脚,这个小工具就会失效. 今天给大家的版本虽然功能及其简单.界面极端丑陋,但是通过 ...

  9. 正方教务系统客户端 error loading midas.dll.

    在windows xp/7/10上安装了客户端,安装到注册字体一步,没有响应,强行结束.启动客户端,登录,出现  error loading midas.dll. 32位:先将 midas.dll 放 ...

随机推荐

  1. Java中的集合和线程安全

    通过Java指南我们知道Java集合框架(Collection Framework)如何为并发服务,我们应该如何在单线程和多线程中使用集合(Collection). 话题有点高端,我们不是很好理解.所 ...

  2. Permission denied

    记录在一次启动tomcat时提示:Permission denied 信息. 解释一下Permission denied的意思-没有权限 解决办法: sudo chmod -R 777 某一目录其中- ...

  3. 关于Puppeteer的那些事儿

    最近开始上手一个自动化测试工具Puppeteer,来谈一谈关于它的一些事儿. Puppeteer中文文档:https://zhaoqize.github.io/puppeteer-api-zh_CN/ ...

  4. Javascript基础一(介绍)

    Javascript的发展历史: JavaScript在设计之初只是为了做表单验证.但是现如今,JavaScript已经成为了一门功能全面的编程语言,已经是WEB中不可缺少的一部分,如今的JavaSc ...

  5. sql语句练习50题(Mysql版-详加注释)

    表名和字段 1.学生表       Student(s_id,s_name,s_birth,s_sex) --学生编号,学生姓名, 出生年月,学生性别 2.课程表       Course(c_id, ...

  6. svnlook - Subversion 仓库检索工具

    SYNOPSIS 总览 svnlook command /path/to/repos [options] [args] OVERVIEW 概述 Subversion 是一个版本控制系统,允许保存旧版本 ...

  7. .NET WEB API 简单搭建

    首先是注释问题: 找到 跟目录下Areas/HelpPage/App_Start/HelpPageConfig.cs 加上代码就OK 了 还有在解决方案属性 点击生成  将XML文档文件勾上 API ...

  8. robotframework+python3+selenium之web相关关键字---第二集

    1.F5可查看所有关键字,如图: 2.浏览器相关关键字: 2.1  Open Browser    https://www.baidu.com  chrome    # 打开浏览器,rf默认使用火狐浏 ...

  9. nodejs 进阶:封装所有对数据库的常用操作

    //这个模块里面封装了所有对数据库的常用操作 var MongoClient = require('mongodb').MongoClient; var settings = require(&quo ...

  10. Java HashMap问题

    1:map集合简述:         我们常用的集合实现类有HashMap.LinkedHashMap.TreeMap,HashTable.HashMap根据key的hashCode值来保存value ...