模拟登录学校教务网 获取课程表信息

原创 2016年05月30日 20:25:34

最终效果:
这个界面是登录学校教务网

登录学校教务网之后 获取课程相关网页的源码 解析源代码时候 将课程信息适配到界面上

第一步:使用 HttpWatch 对教务网抓包 使用Volley框架和HttpUrlConnection 获取课程表信息

  1. 获取cookie
    这是我进入教务网的时候的抓包截图(post登录信息前)

    之前自己在写模拟登录学校教务网信息的时候,找了一下博客上的前辈们的文章。 很多文章上写的cookie是在post登录消息的时候服务器返回的,可是根据我自己的抓包情况我发现我的cookie是在进入教务网登录页面的时候 服务器就返回了的(所以大家还是要以自己的抓包情况来分析)。 在图中我用红色框框标出了 Set-cookie ,它的值就是我们后面发送请求需要的cookie了(获取cookie这个很重要)。

  2. 使用 HttpUrlConnection 将学生的登录信息(学号,密码,验证码)POST 给教务网系统
    抓包截图:
    post相关数据的抓包截图]![这里写图片描述

    post头信息

    个人认为post是整个功能中实现最困难的一步
    写post的时候要特别注意的几个问题:
    注意1:重定向问题 要post的时候要设置重定向为false
    之前一直习惯用Volley框架,可是Volley设置重定向的时候没有直接的方法,最后果断选择HttpUrlConnection

postCon.setInstanceFollowRedirects(false);
注意2:当写post参数的时候注意编码问题,因为正方教务网的编码用的是GB2312的,那么我们在post的时候要将所有参数转换为GBK(GB2312),
__VIEWSTATE和_VIEWSTATEGENERATOR参数的内容,你可以通过解析源码后达到。
 String postData = "__VIEWSTATE=" + URLEncoder.encode(__VIEWSTATE, "GBK") + "&__VIEWSTATEGENERATOR=" + __VIEWSTATEGENERATOR + "&TextBox1=" + account.getText().toString() + "&TextBox2=" + password.getText().toString() + "&TextBox3=" + checkcode + "&RadioButtonList1=" + URLEncoder.encode("学生", "GBK") + "&Button1=";
注意3: post请求头:要将上面获取的那个cookie写入(这样才能让服务器知道是同一个用户在访问服务器  还有 Referer 这个也很重要  不能忘)
  postCon.setRequestProperty("Cookie", cookieString);
  postCon.setRequestProperty("Referer", mainUrl);

到这里 post请求就已经写好了 如果在服务器返回的头信息中能够拿到location的话 就说明你已经登录成功了 ,如果未拿到正确的location信息,请检查一下 我上面说的几点注意 你是否做好。

  1. 登录成功之后, 获取课程表信息
    根据你的抓包结果 向正确的url发送GET请求 (还是要带上之前获取的cookie) 就可以获取正确的课程表网页的源码了,因为根据我抓包的情况来看我不需要设置重定向,那肯定就使用Volley框架了。
 // 获取课表的网页信息
    private void getCourse(String name, String number) {
        StringRequest CourseRequest = null;
        try {
            CourseRequest = new StringRequest(Request.Method.GET, "http://jwxt.zwu.edu.cn/xskbcx.aspx?xh=" + number + "&xm=" + URLEncoder.encode(name, "GBK") + "&gnmkdm=N121603", new Response.Listener<String>() {
                @Override
                public void onResponse(String s) {
//                    Log.e("info", "wangye" + s);
                    Message message = new Message();
                    message.what = 3;
                    message.obj = s;
                    handler.sendMessage(message);
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
                }
            }) {
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    Map<String, String> headers = new HashMap<String, String>();
                    headers.put("Cookie", cookieString);
                    headers.put("Referer", mainUrl + location);

                    return headers;
                }
            };
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        CourseRequest.setTag("CourseRequest");
        requestQueue.add(CourseRequest);

发送请求的时候会有一个姓名的参数要放在url中 这个参数也是可以通过解析之前post请求成功后返回的网页源码得到的。

Java实现从学校教务网上爬取数据(二)—— 获取课表信息以及简单处理

上一篇博客写下通过HttpClient的post方式实现了虚拟登陆教务网,登陆成功之后,获取课表就好说了。登录目的是为了获取cookies,不过上一篇的代码好像并没有管理cookies啊。其实,htt...
  • hdx1996
  • hdx1996
  • 2016年07月15日 22:37
  • 1030

HttpWatch+HttpClient模拟登录学校教务系统

因为最近在做一个安卓项目,有查成绩模块,而学校并不提供接口,也没找到其他可用的API,无奈之下只能回归原始的模拟登录。 此处以我学校广东医学院为例,外网入口:http://125.90.8.125:8...
  • zhongjisadan
  • zhongjisadan
  • 2016年02月02日 14:54
  • 2052

Python项目模拟登录学校正方教务系统抓取课程表。

本人最近偶然遇到python这门语言,发现这门语言在数据抓取文成非常不错。研究了两天实现了一个小项目,当然中间也参考了许多博客.下面我把我自己的经历给大家分享一下。如果自己学校的教务系统也是这个公司的...
  • qq_22222499
  • qq_22222499
  • 2016年09月25日 21:33
  • 5000

用java模拟登录正方教务系统,抓取课表和个人成绩等数据

之前学了一些java web的编程,理解了web应用的原理后,就突然想到,可以用java模拟登录吉珠的教务系统,然后爬取里面的课表、成绩、个人信息等等数据,然后就可以写一个简易的课表APP。...
  • EsauLu
  • EsauLu
  • 2017年03月24日 22:21
  • 3308

python 爬虫登陆学校教务系统

好像很多人写爬虫,都是从登陆学校教务系统开始的。为什么?学校教务系统渣啊,都是明文传输的,而且是200x年写的,没有用到很多现在的技术,所以相对来说容易些。感觉很多学校都是用的清元优软的这个,我们学校...
  • MarxWolf
  • MarxWolf
  • 2016年05月25日 10:17
  • 1563

Android模拟登陆校园教务系统

1.准备 使用到的开源库有:OkHttputils,JSoup 思路:post方式发送学号,密码,验证码到教务系统,持久化cookie,利用Jsoup解析返回的html,分享特定的标签,确定是否登陆成...
  • ProdigalWang
  • ProdigalWang
  • 2017年03月12日 16:41
  • 720

浅谈方正教务模拟登录实现

关于模拟登录教务系统抓取成绩存在的问题及解决措施。
  • qq_37419449
  • qq_37419449
  • 2017年03月17日 12:50
  • 527

模仿超级课程表——抓取学校课表数据

一、显示课表页面的制作 ①、介绍 用过的超标的同学都知道,超标的课表页面是可以滑动的,并且背景为透明色,可以任意修改背景。 效果展示: ②、制作流程 那么如何制作出这样的表格呢? (1)、首先我...
  • chen19960724
  • chen19960724
  • 2016年10月01日 16:29
  • 2454

爬一爬xxx学校的教务网站

爬一爬! 仅仅记录一下一个java狂热者在python中的爬路经历。 谈谈自己对Java和Python在网络编程方面的感受: 曾经的我在java中写过不少爬虫,代码量非常的大(毕竟静态语言非得事先...
  • perryre
  • perryre
  • 2016年12月19日 18:57
  • 606

Java--使用httpClient模拟登陆正方教务系统获取课表

首先,感谢这篇博文给了我思路:http://www.blogfshare.com/php-curl-zhengfang.html  最近形如课程格子与超表课程表应用如雨后春笋般涌现,他们自动获取课程表...
  • u013586078
  • u013586078
  • 2014年12月18日 23:36
  • 7371
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:模拟登录学校教务网 获取课程表信息
举报原因:
原因补充:

(最多只允许输入30个字)