1 @Component2 public class Login extendsBaseJobs {3
4 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");5 /**
6 * 获取当月第一天7 *8 *@return
9 */
10 publicString getFirstDayOfMonth() {11 Calendar lastDate =Calendar.getInstance();12 lastDate.set(Calendar.DATE, 1);//设为当前月的1号
13 returnsdf.format(lastDate.getTime());14
15 }16
17 /**
18 * 计算当月最后一天19 *@return
20 */
21 publicString getLastDayOfMonth() {22
23 Calendar lastDate =Calendar.getInstance();24 lastDate.set(Calendar.DATE, 1);//设为当前月的1号
25 lastDate.add(Calendar.MONTH, 1);//加一个月,变为下月的1号
26 lastDate.add(Calendar.DATE, -1);//减去一天,变为当月最后一天
27 returnsdf.format(lastDate.getTime());28
29 }30
31 //测试
32 public static void main(String args[]) throwsException {33 Login l = newLogin();34 l.login();35 }36
37
38 private static CookieStore cs = newBasicCookieStore();39
40 //利用spring定时器 每天早上10点一刻抓取并发邮件
41 @Scheduled(cron = "0 15 10 ? * *")42 public void login() throwsException {43 DefaultHttpClient httpclient = newDefaultHttpClient();44
45 //创建一个本地上下文信息
46 HttpContext localContext = newBasicHttpContext();47 //在本地上下问中绑定一个本地存储
48 localContext.setAttribute(ClientContext.COOKIE_STORE, cs);49 //目标地址
50 HttpPost httppost = newHttpPost(51 "http://***/userLogin.do");52 //传参
53 StringEntity reqEntity = newStringEntity(54 "userName=jianancun&password=123456&randNum=565656");55 //设置类型
56 reqEntity.setContentType("application/x-www-form-urlencoded");57 //设置请求的数据
58 httppost.setEntity(reqEntity);59 //执行
60 HttpResponse response =httpclient.execute(httppost);61 //取得所有头内容
62 Header[] headers =response.getAllHeaders();63 for(Header h : headers) {64 String name =h.getName();65 String value =h.getValue();66 System.out.println("header : " + h.getName() + ":" +h.getValue());67 if ("Set-Cookie".equalsIgnoreCase(name)) {68 String[] strs = value.split(";");69 for(String str : strs) {70 String[] cookies = str.split("=");71 //输出cookie名称及标题72 //System.out.println("=============== : " + cookies[0] + ":" + cookies[1]);
73 cs.addCookie(new BasicClientCookie(cookies[0], cookies[1]));74 }75 cs.addCookie(new BasicClientCookie("userId", "8888"));76 cs.addCookie(new BasicClientCookie("userName", "jiannancun"));77 cs.addCookie(new BasicClientCookie("state", "0"));78 cs.addCookie(new BasicClientCookie("iAdmin", "0"));79 cs.addCookie(new BasicClientCookie("depCode", "0"));80 }81 }82 HttpEntity entity =response.getEntity();83 //显示结果
84 BufferedReader reader = new BufferedReader(newInputStreamReader(85 entity.getContent(), "UTF-8"));86 String line = null;87 //返回是否登录成功的内容 忽略
88 while ((line = reader.readLine()) != null) {89 //System.out.println(line);
90 }91
92
93
94 //可以添加多个用户
95 String jlc[] ={URLEncoder.encode("贱男春"),"jiannancun@*.cn","888888"};96 List list = new ArrayList();97 list.add(jlc);98
99 for(String []u:list){100 //查询本月考勤内容
101 String logPath = "http://**.cn/timeCard.jsp?nickName="+u[0]+"&eplTimeCard="
102 +u[2]+"&begDate="+getFirstDayOfMonth()+"&endDate="+getLastDayOfMonth();103 String content=getContent(logPath);104 Document doc =Jsoup.parse(content);105 Elements tds = doc.select("table td");106 int i =0;107 //返回的内容
108 String html =""; ;109 for(Element td : tds) {110 //取前25行内容 前25行内容显示的是昨天和今天的考勤记录
111 if(i<25){112 html+=td.text().replace(u[2],URLDecoder.decode(u[0]))+"
";113 } else break;114
115 i++;116 }117 Map map = new HashMap();118 map.put("mailTo",u[1]);119 map.put("mailTitle","考勤提醒");120 map.put("messageBody",html);121 //发送邮件122 //sendMail(map);
123 }124 }125 /**
126 * Function: 请求地址并返回页面内容127 *@authorJNC128 *@paramurl129 *@return
130 *@throwsException131 */
132 private String getContent(String url) throwsException {133 DefaultHttpClient httpclient = newDefaultHttpClient();134 String cookieStr = "";135 List list =cs.getCookies();136 for(Cookie cookie : list) {137 cookieStr += cookie.getName() + "=" + cookie.getValue() + ";";138 }139 //请求目标地址并带上cookie
140 HttpGet httpget = newHttpGet(url);141 httpget.setHeader("Cookie", cookieStr);142 //执行
143 HttpResponse response =httpclient.execute(httpget);144 HttpEntity entity =response.getEntity();145 String resultStr ="";146 BufferedReader reader = new BufferedReader(newInputStreamReader(147 entity.getContent(), "UTF-8"));148 String line = null;149 while ((line = reader.readLine()) != null) {150 resultStr+=line;151 }152 returnresultStr;153 }154 }