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

原创 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+MySQL实现网络爬虫程序

网络爬虫,也叫网络蜘蛛,有的项目也把它称作“walker”。维基百科所给的定义是“一种系统地扫描互联网,以获取索引为目的的网络程序”。网络上有很多关于网络爬虫的开源项目,其中比较有名的是Heritri...
  • zoubf
  • zoubf
  • 2016年03月20日 22:24
  • 1276

Java Selenium模拟某电商登录获取豆豆信息+JUnit单元测试

本来想用Python模拟请求,但是!!经过抓包分析,它的请求里面有两个参数eid和fp是用javaScript动态生成的。顺藤摸瓜,找到javaScript代码,结果!!我看不懂……不仅看不懂,人家是...

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

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

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

博主学习安卓半年多了,在寒假写了这个项目,下面开始正文。 第一步 第一步肯定就是在客户端模拟登陆教务处的官网了,只有登录成功才能获取到想要的信息。 要模拟登陆,我们需要需要一个抓包工具—...

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

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

利用python3.4爬取学校教务系统,并封装成api供app调用(二)之不带验证码模拟登录

利用python3.4爬取学校教务系统,并封装成api供app调用(二)之不带验证码模拟登录做完了之前对学校新闻的页的爬取,对于python3.x的urllib库有了一定的了解,于是就开始了学校教务系...

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

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

python 爬虫实战--登陆学校教务系统获取成绩信息

1. 前言之前写的爬虫都是不需要使用cookie的, 这次我们瞄上了学校的教务系统, 每次登陆都那么几个步骤好费劲啊, 写个爬虫直接获取成绩多好啊~~2. 项目分析首先, 我们的目标页面是: http...

安卓HttpClient+Jsoup+Httpwatch模拟登陆正方教务获取信息

之前想要写一下关于爬数据的文章的,发现时间有点急迫。所以
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:模拟登录学校教务网 获取课程表信息
举报原因:
原因补充:

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