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

原创 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请求成功后返回的网页源码得到的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

模拟登陆第一步:教你如何用wireshare抓取学校学籍管理系统登陆信息

首先打开wireshare,设置过滤器,指定ip,只抓取学校学籍管理系统的信息 我的学校网址为  http://220.169.45.174 用浏览器也可以看到 下面用强大的wi...
  • yibcs
  • yibcs
  • 2013-11-14 17:29
  • 1231

cURL模拟登录教学管理系统

cURL模拟登录教学管理系统 2014-09-12 17:10:21 标签: php curl 微信查课表 模拟登陆 原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

黑马程序员-模拟学校信息管理系统的菜单

#include main() {   int button;     printf()

数据抓包(网络爬虫)-正方教务管理系统登录

本文是基于java EE6.0 + HttpClient + fiddler为基础的。 最近在学jsp,闲来无事,做点东西锻炼锻炼,也可以学习学习,想学习数据抓包。第一印象就是我们学校的正方教务管理系...
  • Lvbey
  • Lvbey
  • 2016-05-19 19:43
  • 6433

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

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

Android 模拟登陆正方教务系统(一)

刷推送时看到一篇讲retrofit的,想试试其中的post,post什么呢,首先想到的是正方,于是,,就试试吧。(本人小白,之前没有怎么使用过这些框架,若有错误,请大神们指教(/▽╲)) 一、抓包 ...

用php实现正方教务系统的模拟登陆

第一次用php实现模拟登陆真的是弄了好久,还挺好玩的就是,都是自己一点一点探索的收获还是慢慢的。到现在还有一点没弄明白的就是为什么不用提交验证码信息也能登陆,感觉可能是bug吧! 想要实现模拟登陆,首...

使用PHP-curl获取验证码并模拟登录教务系统

首先说一下这篇文章的需求,当我们在一些没有提供验证接口的系统中,需要验证用户身份的时候,就可能需要用户登录当前系统,从而确定该用户是当前系统的合法用户,校园的教务系统就是一个典型的例子,我们通过学生自...

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

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

Android客户端利用OKhttp3,Jsoup简洁详细实现登录教务官网,并获取成绩,课程表,培养计划等

博主学习安卓半年多了,在寒假写了这个项目,下面开始正文。 第一步 第一步肯定就是在客户端模拟登陆教务处的官网了,只有登录成功才能获取到想要的信息。 要模拟登陆,我们需要需要一个抓包工具—...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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