我用HttpClient 4.5模拟登陆自己学校的教务系统,我们学校登陆成功先返回一个302跳转(勿喷,正方教务。。。):

先获取隐藏值:

/**

* 获取隐藏值

* @throws ClientProtocolException

* @throws IOException

*/

private void getHiddenValues() throws ClientProtocolException, IOException {

HttpGet get = new HttpGet(loginURL);

RequestConfig config = RequestConfig.custom().

setSocketTimeout(connectTimeout).

setConnectTimeout(socketTimeout).build();

get.setHeader("User-Agent", userAgent);

get.setConfig(config);

CloseableHttpResponse response = client.execute(get);

if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {

HttpEntity entity = response.getEntity();

String rawHtml = EntityUtils.toString(entity);

Document doc = Jsoup.parse(rawHtml);

Element viewStateInput = doc.select("input[name=__VIEWSTATE]").first();

Element generatorInput = doc.select("input[name=__VIEWSTATEGENERATOR]").first();

Element validationInput = doc.select("input[name=__EVENTVALIDATION]").first();

// 网络有问题

if(viewStateInput == null) return;

params.add(new BasicNameValuePair("__VIEWSTATE", viewStateInput.attr("value")));

if(generatorInput != null)

params.add(new BasicNameValuePair("__VIEWSTATEGENERATOR",

generatorInput.attr("value")));

if(validationInput != null)

params.add(new BasicNameValuePair("__EVENTVALIDATION",

validationInput.attr("value")));

}

}

然后模拟登陆(其余的参数都是用firebug看出来的)

/**

* 登录

*

* @param url

* @param params

* @return

* @throws IOException

*/

public boolean login(String account, String password) throws IOException {

getHiddenValues();

if(params.size() > 0) {

HttpPost post = new HttpPost(redirectURL);

RequestConfig config = RequestConfig.custom()

.setSocketTimeout(connectTimeout)

.setConnectTimeout(socketTimeout)

.setRedirectsEnabled(false)

.build();

post.setConfig(config);

post.setHeader("User-Agent", userAgent);

// 账号

params.add(new BasicNameValuePair("TextBox1", account));

// 密码

params.add(new BasicNameValuePair("TextBox2", password));

// 学生

params.add(new BasicNameValuePair("RadioButtonList1", "%D1%A7%C9%FA"));

params.add(new BasicNameValuePair("Button1", ""));

params.add(new BasicNameValuePair("lbLanguage", ""));

post.setEntity(new UrlEncodedFormEntity(params, "GBK"));

CloseableHttpResponse response = client.execute(post);

// 获取响应状态码

int status = response.getStatusLine().getStatusCode();

// 302表示重定向状态

if(status == 302) {

return true;

} else

return false;

}

return false;

}

第一次执行登陆成功了:

第二次失败了。。。(看了看是500)

第三次无反应了(一直没返回,调试看了看,在第一次方法的response那里阻塞了,我都设置了超时了。。。)。。。

我是用SpringMVC框架做的,

这是控制器代码:

@Controller

public class IndexController {

@RequestMapping({"", "/"})

public ModelAndView index() {

ModelAndView mdv = new ModelAndView("index");

HttpUtil util = new HttpUtil();

try {

mdv.addObject("result", util.login("*******", "*********"));

} catch (IOException e) {

e.printStackTrace();

}

return mdv;

}

}

代码封装的很烂,勿喷!

java 模拟登录出现系统异常_很奇怪!Java web问题,模拟登陆教务系统刷新两次后就没反应了!...相关推荐

  1. Java爬取frame的课程表_从爬取湖北某高校hub教务系统课表浅谈Java信息抓取的实现 —— import java.*;...

    原创文章与源码,如果转载请注明来源. 一.概述 整个系统用Java开发.我们现在要做的是类似于超级课程表.课程格子之类的功能:输入一个学生的教务系统账号.密码,得到Ta的课程表信息.点击进入课表查询, ...

  2. selenium模拟登陆教务系统

    之前学习了selenium的安装和上手,现在来一次模拟登陆教务系统.有基础的同学可以直接拿走代码,去写抢课的脚本,但是估计效果不会蛮好.登陆页面如下 解除右键禁用 当然在此之前因为这个教务系统网站不能 ...

  3. python模拟登录网站_Python模拟登录淘宝都实现了,你还怕模拟登录?

    文章转载自公众号 :裸睡的猪 , 作者 猪哥66 最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能时基本都需要登录,所以就想出一篇模拟登录淘宝的文章! 看了下网上有很多关于模拟登录淘宝,但是 ...

  4. (微信开发)PHP curl模拟登陆教务系统查询成绩查询课表实现微信查成绩差课表功能

    </pre><p></p><pre name="code" class="php"></pre> & ...

  5. java模拟登陆教务系统_Java模拟登录高校教务系统

    模拟登陆部分代码: 本次使用HttpClient 4.3进行开发, 该版本与之前的代码写法风格相差较大, 大家多留意下.需导入Jar包:commons-logging-1.1.3.jar / http ...

  6. java 必须try catch的异常_【java基础之异常】死了都要try,不淋漓尽致地catch我不痛快!...

    @ 1.异常 1.1 异常概念 异常 :简单说就是不正常运行,最终导致JVM的非正常停止. 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象.Java处 ...

  7. java中什么时候应用异常_生产Java应用程序中的十大异常类型-基于1B事件

    java中什么时候应用异常 Pareto记录原理:97%的记录错误语句是由3%的唯一错误引起的 在最新的数据整理帖子之后,我们收到了很多反馈和问题,我们发现97%的记录错误是由10个唯一错误引起的 . ...

  8. 受检异常 非受检异常_这样设计 Java 异常更优雅,赶紧学

    来源:Lrwinlrwinx.github.io/2016/04/28/如何优雅的设计java异常/ 导语 异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据自 ...

  9. java捕捉sql执行异常_如何捕获java.sql.SQLIntegrityConstraintViolationException?

    我的应用程序使用JPA JavaDB,当我尝试持久存储违反约束的对象时,控制台上显示 SQLIntegrityConstraintViolationException. 可以,但是我无法捕获该异常,为 ...

最新文章

  1. Jenkins实现SVN+Maven+Java项目的持续集成
  2. XPath与多线程爬虫
  3. 用 Python 画圣诞树的 N 种玩法
  4. 圣诞节计算机老师贺卡祝福语,老师圣诞节贺卡祝福语
  5. 了解mysql文章_一篇文章带你深入了解MySQL 索引相关
  6. PHP中如何给日期加上一个月 加一周 加一天
  7. linux中memcpy实现分析,ARM64 的 memcpy 优化与实现
  8. idea jpa方法 自动提示_Spring Boot的自动配置、Commandline Runner
  9. kotlin和python哪个好_python替代品for一些java及kotlin功能(慎入啊慎入)
  10. 【转载】GitHub详细教程
  11. 10_android打包的过程
  12. 【Linux】tar命令各参数详解
  13. Altium20版本快速批量修改Comment使之与Value相同
  14. 【STM32HF429的DSP教程】第40章 STM32F429的FIR带阻滤波器实现(支持逐个数据的实时滤波)
  15. 域名绑定SSL阿里云免费证书
  16. 十进制100转换成八进制是多少?
  17. [清风数学建模]层次分析法(AHP)笔记及代码实现
  18. [JZOJ6355] 【NOIP2019模拟】普 24/100
  19. 浅析Margin和Padding属性
  20. 海康威视人脸识别门禁系统对接

热门文章

  1. 云计算HCIP实验-AD域控搭建
  2. 基于Python+openGauss实现(图形界面)多功能本地视频播放系统【100010086】
  3. HTML页面常用布局(HTML)
  4. 1916. 统计为蚁群构筑房间的不同顺序 费马小定理+快速幂+DFS
  5. linux中du命令参数的用法,linux中du命令参数及df命令和dd命令介绍
  6. android调用系统自带的的浏览器搜索关键字
  7. atan2相关知识汇总
  8. openCV Python学习笔记(二)画几何
  9. 盘点世界排名最前的5款开源ERP软件
  10. IDEA修改jvm内存