HttpURLConnection写的模拟登陆
2015-04-25 10:39
281 查看
前几天由于一个项目的需求要获取教务系统的课表,获取课表由于没有API所以只能自己瞎折腾,最初的版本破解了我自己做的一个简单的登陆网站并获取到了后台的数据,源码是这样的:
然后,我踏上了征服教务系统的旅程,这个时候,你对浏览器和服务器之间进行的操作将会越来越清楚,遇到的小问题也会越来越多,你不是太熟悉,而且不能打断点,你只能看到没有登陆成功的网页显示出来,所以你也不知道链接不成功到底是哪一方面的原因,你只能去全面了解浏览器和服务器之间的操作。起初我认为是没有设置请求头,参数不全所致,然后,便陷入了作死模式,无现的寻找那些未知的参数如何来的。后来我用ie10抓包,发现教务系统的setcookie并不是从登陆页面的正面传过来的,这个是关键,在这里亲身经历告诉大家思考不能太死板,要先看你想获得的那些数据的网页的cookie从哪里来,然后一直找到源头,用火狐和ie都可以查看。
好,你们觉得我进去了吗?很遗憾,我还是没有进去,为了能交上作业,我用了高级工具httpclient,用上我找的网页拼上账号密码,一秒钟进去,自尊很是打击,本来想告一段落,可是有一个勤奋好学的朋友冯景华一直想问底层,不想用高级工具,在迫于他的淫威,和我的自尊心下,我又奋斗了一天,终于找到了问题的关键connection.setInstanceFollowRedirects(false); 我没有关闭这个!!!导致重定向时,我的cookie给清了,而httpclient对cookie管理的工作处理的特别好,一切设置也不需要你来弄,只需要传参.呵呵,问题终于解决了,源码就不传了毕竟是学校的系统,在这个基础上,设置请求头,加上connection.setInstanceFollowRedirects(false);就行了
,还有提醒注意一下connection.addRequestProperty和addRequestProperty,如果有同名参数set会覆盖connection里面接收到的RequestProperty
每个网站登陆的保密性能都不一样,不是登陆过一个学校的教务系统就能登陆所有的教务系统,所以请放开心,我们学校的比较简单,还有一种加验证码的,有空在尝试一下。
package test; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class bbslogin { public static void main(String[] args) throws IOException { String surl = "http://localhost:8080/BBS5/login.jsp"; URL url = new URL(surl); //创建url对象能与HttpURLConnection对话 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //打开输入输出流,方便传入数据与传出数据 connection.setDoInput(true); connection.setDoOutput(true); //实际链接操作是connection.connect 这一句话就隐式调用了connection.connect OutputStreamWriter out = new OutputStreamWriter(connection .getOutputStream(), "GBK"); //传入数据 out.write("uname=aa&upass=a"); out.flush(); //注意记得关闭流,不然连接不能结束会抛出异常 out.close(); //获取服务器发送给你的Set-Cookie,连接网站就靠他了 String cookieVal = connection.getHeaderField("Set-Cookie"); //得到后,下面的操作就是你想得到哪个页面的数据了 String s = "http://localhost:8080/BBS5/doIndex.jsp"; url = new URL(s); HttpURLConnection resumeConnection = (HttpURLConnection) url .openConnection(); //传入你上面获取到的Set-Cookie if (cookieVal != null) { resumeConnection.setRequestProperty("Cookie", cookieVal); } //实际链接,我曾经也想,为什么不带账号密码和cookie一起传而只创cookie呢,实际上浏览器识别一个客户都是用cookie来识别,cookie中就包含了这些信息 resumeConnection.connect(); //创建输入流对象,接收连接后的网页数据 InputStream urlStream = resumeConnection.getInputStream(); //将输入流以bufferedReader的方式输出 BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(urlStream)); String ss = null; String total = ""; //输出结果。校验你是否操作成功 while ((ss = bufferedReader.readLine()) != null) { total += ss; System.out.println(ss); } } }代码亲测可用
然后,我踏上了征服教务系统的旅程,这个时候,你对浏览器和服务器之间进行的操作将会越来越清楚,遇到的小问题也会越来越多,你不是太熟悉,而且不能打断点,你只能看到没有登陆成功的网页显示出来,所以你也不知道链接不成功到底是哪一方面的原因,你只能去全面了解浏览器和服务器之间的操作。起初我认为是没有设置请求头,参数不全所致,然后,便陷入了作死模式,无现的寻找那些未知的参数如何来的。后来我用ie10抓包,发现教务系统的setcookie并不是从登陆页面的正面传过来的,这个是关键,在这里亲身经历告诉大家思考不能太死板,要先看你想获得的那些数据的网页的cookie从哪里来,然后一直找到源头,用火狐和ie都可以查看。
好,你们觉得我进去了吗?很遗憾,我还是没有进去,为了能交上作业,我用了高级工具httpclient,用上我找的网页拼上账号密码,一秒钟进去,自尊很是打击,本来想告一段落,可是有一个勤奋好学的朋友冯景华一直想问底层,不想用高级工具,在迫于他的淫威,和我的自尊心下,我又奋斗了一天,终于找到了问题的关键connection.setInstanceFollowRedirects(false); 我没有关闭这个!!!导致重定向时,我的cookie给清了,而httpclient对cookie管理的工作处理的特别好,一切设置也不需要你来弄,只需要传参.呵呵,问题终于解决了,源码就不传了毕竟是学校的系统,在这个基础上,设置请求头,加上connection.setInstanceFollowRedirects(false);就行了
,还有提醒注意一下connection.addRequestProperty和addRequestProperty,如果有同名参数set会覆盖connection里面接收到的RequestProperty
每个网站登陆的保密性能都不一样,不是登陆过一个学校的教务系统就能登陆所有的教务系统,所以请放开心,我们学校的比较简单,还有一种加验证码的,有空在尝试一下。
相关文章推荐
- 使用HTTPURLConnection模拟登陆,爬取网页内容
- HttpURLConnection模拟用户登陆
- 使用HTTPURLConnection模拟登陆,爬取网页内容
- 通过HttpURLConnection模拟post表单提交
- HttpUrlConnection 实现模拟POST表单传输
- HttpURLConnection简单用法-java模拟HTTP请求
- 通过HttpURLConnection模拟post表单提交
- HttpURLConnection 模拟登录方法 (带cookie 的Post/Get)外挂
- 采用HttpURLConnection的POST方式实现登陆案例
- java使用HttpURLConnection和HttpClient分别模拟get和post请求以及操作cookies
- Java HttpURLConnection模拟请求Rest接口解决中文乱码问题
- HttpURLConnection模拟登录后添加cookie读取网页
- 通过HttpURLConnection模拟post表单提交
- 06_android入门_采用HttpURLConnection的POST方式实现登陆案例
- 模拟手机客户端与Web应用的交互[URL和HttpURLConnection的使用]
- 用HttpURLConnection模拟post请求,不post的问题
- 通过HttpURLConnection模拟post表单提交
- IT忍者神龟之通过HttpURLConnection模拟post表单提交
- 采用HttpURLConnection的GET方式实现登陆案例
- HttpURLConnection 和HttpClient+Jsoup处理标签抓取页面和模拟登录