如何实现一个属于自己的查成绩app

这期内容当中小编将会给大家带来有关如何实现一个属于自己的查成绩app,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

一、准备工作

准备工具:电脑

软件:Fiddler 4(哪个都行,只要抓包)

打开我们学校的教务网站http://202.192.240.29/login!welcome.action

如何实现一个属于自己的查成绩app

点击验证码框,会向服务器发送get请求,这是我抓到的请求内容

如何实现一个属于自己的查成绩app

服务器返回的是一个验证码

如何实现一个属于自己的查成绩app

当我输入验证码,然后点击登录,这是我抓到的包

如何实现一个属于自己的查成绩app

这里可以看到请求的内容是account=311500xxxx&pwd=xxxxxx&verifycode=84ga

这里不用多讲吧,account是学号,pwd当然是password啦,verifycode肯定是验证码啦。

当我们登录成功,服务器回返回一个json数据,成功的code是0,message是“登录成功”,如果错误的话,code是-1,message会提示你错误的方式。

然后我们点击成绩查询。

如何实现一个属于自己的查成绩app

这是我抓到的数据,这里服务器同样返回的是json数据,这很有利于我们的解析。

       到这里,我们的前期准备工作已经完成,下一步,干嘛呢?

二、主要思路

    这里我开始介绍,我的主要思路。当然这里需要你对http协议有那么一点的认识,强烈推荐一本快速入门的书《图解http》。

       我们可以看到,我每次发送post请求或者get请求时都会有这么一个东西Cookie:JSESSIONID=BCA9EDDA29865D38E7D7344D975D78A6,这是啥东西呢?因为http协议是无状态的,那么我们要怎么确认当前用户就是刚刚登陆的用户呢?所以这里就有了JSESSIONID,要是不明白,请百度(JSESSIONID),然后你看看应该就会明白了,这里假设你已经明白了。

   这个JSESSIONID是当我们第一次打开教务网站的时候,服务器给我们分配的。有图有真相,看图。

如何实现一个属于自己的查成绩app

       这里的Set-Cookie: JSESSIONID=428F8358B38BB1C1B9B344E5D1D79DA2;Path=/; HttpOnly,我们主要关心这个JSESSIONID=428F8358B38BB1C1B9B344E5D1D79DA2(这里为啥跟上面不一样呢,因为我重新打开了浏览器,系统又重新给我分配的),这里的set-cookie就给我们设置了JSESSIONID,这里就是我们当前登录的唯一标识,所以我们每次发送请求的时候都要带上它。

 

 

三、具体实现(Java实现)

 

       class myVerifyThread extends Thread{

        @Override

        public void run() {

            try {

                HttpClient httpClient = newDefaultHttpClient();

                HttpGet httpGet = new HttpGet(“http://202.192.240.29/yzm?d=1515824347343”);

               httpGet.setHeader("Accept","*/*");

               httpGet.setHeader("Connection","keep-alive");

               httpGet.setHeader("User-Agent","Mozilla/5.0 (Windows NT10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132Safari/537.36");

                HttpResponse httpResponse =httpClient.execute(httpGet);

                if(httpResponse.getStatusLine().getStatusCode() == 200) {

                    SaveCookies(httpResponse);//保存获得的JSESSIONID

                    // 请求和响应都成功了

                    byte[] bytes;

                    bytes =EntityUtils.toByteArray(httpResponse.getEntity());

                    Message message=new Message();

                    Bundle bundle=new Bundle();

                   bundle.putByteArray("verify",bytes);

                    message.setData(bundle);

                    message.what=1001;

                   handle.sendMessage(message);//获取验证码

                }

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

 

这里是想服务器发送get请求,也就是获得验证码。

这里把获得验证码发送出去。

如何实现一个属于自己的查成绩app

这里把验证码显示出来。

   下面这个函数是保存从服务那边获得的JSESSIONID。

如何实现一个属于自己的查成绩app

然后我们实现登录功能。

如何实现一个属于自己的查成绩app

这里我们再把JSESSIONID给添加到请求头那里去,这样我们就完美欺骗了服务器,我就是刚刚第一访问你的那个我。(其他的头可以根据抓包那里的头来设置)

如何实现一个属于自己的查成绩app

这里解析服务器返回我们的json数据。

如何实现一个属于自己的查成绩app

到这里大家应该都懂了吧。

   具体思路就是给服务器发送http请求,然后保存服务器返回的JSESSIONID,然后我们访问的时候都要把JSESSIONID添加到post请求头那里,这样我们就可以访问了。

如何实现一个属于自己的查成绩app

如何实现一个属于自己的查成绩app

    这是效果图。

上述就是小编为大家分享的如何实现一个属于自己的查成绩app了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

原创文章,作者:bd101bd101,如若转载,请注明出处:https://blog.ytso.com/230712.html

(0)
上一篇 2022年1月15日
下一篇 2022年1月15日

相关推荐

发表回复

登录后才能评论