如何写一个属于自己的查成绩app
2018-01-21 12:04
71 查看
一、准备工作
准备工具:电脑
软件:Fiddler 4(哪个都行,只要抓包)
打开我们学校的教务网站http://202.192.240.29/login!welcome.action
点击验证码框,会向服务器发送get请求,这是我抓到的请求内容
服务器返回的是一个验证码
当我输入验证码,然后点击登录,这是我抓到的包
这里可以看到请求的内容是account=311500xxxx&pwd=xxxxxx&verifycode=84ga
这里不用多讲吧,account是学号,pwd当然是password啦,verifycode肯定是验证码啦。
当我们登录成功,服务器回返回一个json数据,成功的code是0,message是“登录成功”,如果错误的话,code是-1,message会提示你错误的方式。
然后我们点击成绩查询。
这是我抓到的数据,这里服务器同样返回的是json数据,这很有利于我们的解析。
到这里,我们的前期准备工作已经完成,下一步,干嘛呢?
二、主要思路
这里我开始介绍,我的主要思路。当然这里需要你对http协议有那么一点的认识,强烈推荐一本快速入门的书《图解http》。
我们可以看到,我每次发送post请求或者get请求时都会有这么一个东西Cookie:JSESSIONID=BCA9EDDA29865D38E7D7344D975D78A6,这是啥东西呢?因为http协议是无状态的,那么我们要怎么确认当前用户就是刚刚登陆的用户呢?所以这里就有了JSESSIONID,要是不明白,请百度(JSESSIONID),然后你看看应该就会明白了,这里假设你已经明白了。
这个JSESSIONID是当我们第一次打开教务网站的时候,服务器给我们分配的。有图有真相,看图。
这里的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请求,也就是获得验证码。
这里把获得验证码发送出去。
这里把验证码显示出来。
下面这个函数是保存从服务那边获得的JSESSIONID。
然后我们实现登录功能。
这里我们再把JSESSIONID给添加到请求头那里去,这样我们就完美欺骗了服务器,我就是刚刚第一访问你的那个我。(其他的头可以根据抓包那里的头来设置)
这里解析服务器返回我们的json数据。
到这里大家应该都懂了吧。
具体思路就是给服务器发送http请求,然后保存服务器返回的JSESSIONID,然后我们访问的时候都要把JSESSIONID添加到post请求头那里,这样我们就可以访问了。
这是效果图。
欢迎关注我的公众
有问题可以给我留言。
准备工具:电脑
软件:Fiddler 4(哪个都行,只要抓包)
打开我们学校的教务网站http://202.192.240.29/login!welcome.action
点击验证码框,会向服务器发送get请求,这是我抓到的请求内容
服务器返回的是一个验证码
当我输入验证码,然后点击登录,这是我抓到的包
这里可以看到请求的内容是account=311500xxxx&pwd=xxxxxx&verifycode=84ga
这里不用多讲吧,account是学号,pwd当然是password啦,verifycode肯定是验证码啦。
当我们登录成功,服务器回返回一个json数据,成功的code是0,message是“登录成功”,如果错误的话,code是-1,message会提示你错误的方式。
然后我们点击成绩查询。
这是我抓到的数据,这里服务器同样返回的是json数据,这很有利于我们的解析。
到这里,我们的前期准备工作已经完成,下一步,干嘛呢?
二、主要思路
这里我开始介绍,我的主要思路。当然这里需要你对http协议有那么一点的认识,强烈推荐一本快速入门的书《图解http》。
我们可以看到,我每次发送post请求或者get请求时都会有这么一个东西Cookie:JSESSIONID=BCA9EDDA29865D38E7D7344D975D78A6,这是啥东西呢?因为http协议是无状态的,那么我们要怎么确认当前用户就是刚刚登陆的用户呢?所以这里就有了JSESSIONID,要是不明白,请百度(JSESSIONID),然后你看看应该就会明白了,这里假设你已经明白了。
这个JSESSIONID是当我们第一次打开教务网站的时候,服务器给我们分配的。有图有真相,看图。
这里的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请求,也就是获得验证码。
这里把获得验证码发送出去。
这里把验证码显示出来。
下面这个函数是保存从服务那边获得的JSESSIONID。
然后我们实现登录功能。
这里我们再把JSESSIONID给添加到请求头那里去,这样我们就完美欺骗了服务器,我就是刚刚第一访问你的那个我。(其他的头可以根据抓包那里的头来设置)
这里解析服务器返回我们的json数据。
到这里大家应该都懂了吧。
具体思路就是给服务器发送http请求,然后保存服务器返回的JSESSIONID,然后我们访问的时候都要把JSESSIONID添加到post请求头那里,这样我们就可以访问了。
这是效果图。
欢迎关注我的公众
有问题可以给我留言。
相关文章推荐
- 【如何快速的开发一个完整的iOS直播app】(采集篇)
- 我有一个 APP 创意,如何将其实现?
- iOS9中如何在日历App中创建一个任意时间之前开始的提醒(一)
- iOS9中如何在日历App中创建一个任意时间之前开始的提醒(三)
- android知识回顾------如何搭建一个app
- 【如何快速的开发一个完整的iOS直播app】(原理篇)
- 【如何快速的开发一个完整的iOS直播app】(原理篇)
- 如何自定义协议从自己的一个app打开另一个app
- 如何替换触屏去点击Android的一个App应用上的一个button
- 如何判断是否为同一个App,Ionic3如何修改包名
- 如何删除一个Google App Engine应用 转自:http://xsinger.co.cc/archives/129
- 【如何快速的开发一个完整的iOS直播app】(采集篇)
- 测试工作——如何区别一个 App 是 Native App, Web App 还是 Hybrid app?
- 如何快速地编写和运行一个属于自己的MapReduce例子程序
- 一个APP应用产品该如何留住用户
- Cordova webapp实战开发:(5)如何写一个Andorid下自动更新的插件?
- 如何开发一个App(Android)
- 【移动端debug-6】如何做一个App里的web调试小工具
- 如何替换触屏去点击Android的一个App应用上的一个button