关闭

[置顶] 针对 android端模拟教务系统登陆,主要针对抓包过程,post,get请求,和解析网页和cookie(二)

标签: androidcookie控件教务系统get
391人阅读 评论(0) 收藏 举报
分类:

针对 android端模拟教务系统登陆,主要针对抓包过程,post,get请求,和解析网页和cookie(二)

2016年8月31日09:55:41
在第一篇中我们已经实现了 抓包过程 和 模拟登陆的过程,下面我们进行 jsoup 解析 和 携带 cookie 的get 请求,然后将返回的数据 显示到我们的控件上去。

(1)接着上一篇的结尾,我们已经拿到 返回的源码 ,贴出来中间一部分。 这段html 代码对应就是 如下图所示的界面

</li>
                                                                                                                                                    <li>
                            <a class="toolMenuLink " href="http://202.196.240.54/portal/site/%7E144803085/page/37c4e5eb-0ee8-4aa0-9c84-6c568dbbcf08"
 title="查看和修改用户偏好的工具">
                            <span class="toolMenuIcon icon-sakai-preferences "></span><span class="menuTitle">&#29992;&#25143
;&#20559;&#22909;</span>
                            </a>
                        </li>
                                                                                                                                                    <li>
                            <a class="toolMenuLink " href="http://202.196.240.54/portal/site/%7E144803085/page/f6610bf6-513e-4c86-8ede-a2468a5c6848"
 title="查看和修改我的个人信息">
                            <span class="toolMenuIcon icon-sakai-singleuser "></span><span class="menuTitle">&#36134;&#25143
;&#20449;&#24687;</span>
                            </a>
                        </li>

这里写图片描述

我们现在比如 想拿到 “账户信息” 中的数据,(其实跟获取比如 成绩 课表都是一样的),我们应该先 进入 这个 账户信息 里面,如下图
这里写图片描述
到这里我们来明确一下过程
**
【1】拿到我们需要进入页面的网址
【2】进行 post 或者 get 请求 , 返回 响应的网页源代码
【3】根据网页源代码 使用 jsoup 将我们需要的 数据项 找到,并且储存放入,方便显示到 控件上去。
**
【1】拿到我们需要的网址,我们可以先使用 查看页面中元素按钮(这里写图片描述
来看一下 我们在网页 进入的 按钮, 当我们放在 账号信息上时,它自动给出来了一个网址
这里写图片描述

这个网址在我们登陆成功响应的 源码中可以找到,
http://202.196.240.54/portal/site/%7E144803085/page/f6610bf6-513e-4c86-8ede-a2468a5c6848

我们分析这个网址,发现把它 直接写死不好,万一发生变动后就不对了,所以我们可以使用 jsoup,先将我们登陆成功后的 网页源码,中的这个网址 获取到。
代码部分:

/**
     *  登陆成功后,使用jsoup 将网页内容解析出来,找到个人信息的网址
     * @param mAINBODYHTML  登陆成功后的网页内容 string 类型
     */
    protected void IsLoginSuccessful(String mAINBODYHTML) {
        // TODO Auto-generated method stub
        Document document = Jsoup.parse(mAINBODYHTML);

        Elements a = document.select("a[href]"); // 会抓取到 a 标签

        StringBuffer sb = new StringBuffer(); //存放到 stringbuffer中
        for (Element link : a) {
            // 获取所要查询的URL,这里对应地址按钮的名字叫 账户信息
            if (link.text().equals("账户信息")) {
                sb.append(link.attr("href"));
            }
        }
        user_url = sb.toString();  // 这个就是我们拿到的网址

        user_Infor(user_url); // 这个方法就是 下来我们使用这个网址 的 get请求

    }

jsoup 的相关语法,可以看jsoup的api,或者直接百度搜索用法,就可以了。
我看的是这个网址
http://www.jb51.net/article/43485.htm

【2】 将拿到的网址 进行 get请求,在我们看进入 账户信息 抓包过程的时候,可以看到 使用的方式 是 get 请求, 和一些 请求头信息 响应的源码,
如图 头信息
这里写图片描述
响应的 源码 (一部分)
这里写图片描述
这里写图片描述

那我们可是 进行 get 请求,并且携带上我们之前获取到的 cookie

代码部分 :

/**get请求到获得的个人信息的网址
     * @param path get请求的网址
     */
    private void user_Infor(final String path) { 

        new Thread() {
            /* (non-Javadoc)
             * @see java.lang.Thread#run()
             */
            public void run() {
                try {

                // 进行post 请求 使用httpclient
                //  DefaultHttpClient client = new DefaultHttpClient(); // 获取到
                                                                    // httpclient
                                                                    // 对象
// 我这里创建的  client 已经生成成员变量了,没有再次创建DefaultHttpClient 对象
                // 【1】进行post请求
                HttpGet httpget = new HttpGet(path);

//*************************************************
                // 【2】设置头信息  两个必须设定的信息   Referer    Cookie
                httpget.setHeader("Referer", path); 
                httpget.setHeader("Cookie", "JSESSIONID="+parseCookie());

//***************************************************
                //【3】 响应请求
                HttpResponse httpResponse;

                    httpResponse = client.execute(httpget);

                    // 【4】判断状态码 如果为 200 则要检查表单 如果为 302 继续
                    if (httpResponse.getStatusLine().getStatusCode() == 200) {

                        HttpEntity entity = httpResponse.getEntity();
                        String user_infor = EntityUtils.toString(entity);  // 【5】返回响应源码
                        user_infor_jsup(user_infor);  // 【6】 再次进行解析

                    }
                } catch (Exception e) {

                    e.printStackTrace();
                }

            };

        }.start();

    }

下面我写一下我的看法,
(1)设定 头信息的时候,第一次我写的时候 在设定 cookie 时,我这样写的
httpget.setHeader(“Cookie”, “JSESSIONID=1f223c1e-eceb-4fd2-a641-f9ecf9680644.Test01”);
也就是把 cookie 写死了,然而不对,因为这个 cookie在不断的变化,导致我get请求后,一直进入的是没有登陆的界面,也就是它判定我没有登陆,后来我把cookie 换成从 list 每次拿到的数据,才登陆成功。返回的源码才正确。

【3】 下面做的操作 和 我们第一次进行 jsoup 解析一样,都是通过解析 html 内容把,我们需要的信息拿出来。
代码部分:

/**
     *  解析得到的网址
     * @param path  个人信息的路径
     */
    private void user_info_jsoup2(String path){

        list = new ArrayList<String>();  // 把生成的信息放入到 list中去

        Document document = Jsoup.parse(path);
        Elements select = document.select("div"); //找到 div 标签
        StringBuffer sb = new StringBuffer();
        for (Element link : select) {

            list.add(link.text()); // 拿到文本内容
            sb.append(link.text());


        }
         System.out.println("拿到的数据"+sb.toString());

         for (int i = 0; i < list.size(); i++) {

             String string = list.get(i);
             System.out.println("返回的数据"+string);

        }

         show_user_infor();  // 显示我们拿到的数据


    }

我把 解析完成后拿到的数据 贴出来,(就是我存放在 list中的数据)
这里写图片描述
【4】 既然我们拿到了我们所需要的数据,直接更新 ui 就行了
既然更新 ui 必须在主线程中,所以使用到 runOnUiThread 这个方法。
代码部分

/**
     *   显示我们拿到的数据
     */
    public void show_user_infor(){
        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                id_text.setText(list.get(1));
                name_text.setText(list.get(2));
                sj_text.setText(list.get(7));
            }
        });

贴一下,效果图
这里写图片描述

到这个地方基本就完成了,这个只是一个很简单的demo。
下面我贴出我参考过的博文,并表示感谢。
http://www.xuebuyuan.com/2039349.html android超级课程表原理

http://blog.csdn.net/mikogodzd/article/details/51133919

http://blog.csdn.net/cazicaquw/article/details/7185826

欢迎各位指正 错误。谢谢

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:23371次
    • 积分:1047
    • 等级:
    • 排名:千里之外
    • 原创:73篇
    • 转载:30篇
    • 译文:0篇
    • 评论:1条
    求职
    本人寻求Java实习工作,电话:17839166574,QQ:1164014750
    博客专栏