代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
模拟登录正方教务抓取成绩、课表、空教室
作者:
咏矽
/ 发布于
2016/4/6
/
789
Java实现模拟登录正方教务抓取成绩、课表、空教室,通过HttpClient来模拟浏览器请求,Jsoup解析网页内容。附带验证码分析。
package com.ican.yueban.jwgl; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import com.ican.yueban.utils.DateUtils; import com.ican.yueban.utils.GlobalConstant; import com.ican.yueban.utils.IOUtils; import com.ican.yueban.utils.ParseUtils; public class Jwgl { private static String stuNumber = ""; private static String stuName = ""; private static String Cookie = ""; private String indexUrl = GlobalConstant.INDEX_URL; private String secretCodeUrl = GlobalConstant.SECRETCODE_URL; private String loginUrl = GlobalConstant.LOGIN_URL; private String mainUrl = GlobalConstant.MAIN_URL; private String queryClassroomUrl = GlobalConstant.QUERY_CLASSROOM_URL; private String queryClassroomGnmkdm = GlobalConstant.QUERY_CLASSROOM_GNMKDM; private String queryStuGradeUrl = GlobalConstant.QUERY_STU_GRADE_URL; private String queryStuGradeGnmkd = GlobalConstant.QUERY_STU_GRADE_GNMKDM; private String queryStuCourseUrl = GlobalConstant.QUERY_STU_COURSE_URL; private String queryStuCourseGnmkd = GlobalConstant.QUERY_STU_COURSE_GNMKDM; private String xixiaoqu = GlobalConstant.XIXIAOQU; private String identityStu = GlobalConstant.IDENTITY_STU; /** * 登录功能 * * @param stuNumber * @param password * @return * @throws Exception * @throws UnsupportedOperationException */ public boolean login(String stuNumber, String password) throws UnsupportedOperationException, Exception { this.stuNumber = stuNumber; // 获取验证码 HttpGet secretCodeGet = new HttpGet(secretCodeUrl); CloseableHttpClient client = HttpClients.createDefault(); CloseableHttpResponse responseSecret = client.execute(secretCodeGet); // 获取返回的Cookie Cookie = responseSecret.getFirstHeader("Set-Cookie").getValue(); String viewState = IOUtils.getViewState(indexUrl, "", ""); // 将验证码下载到C盘 IOUtils.getSecret(responseSecret.getEntity().getContent(), "secretCode.png", "c://"); Scanner sc = new Scanner(System.in); System.out.println("请输入验证码:"); // 手动填充刚才获取的验证码的值 String secret = sc.next().trim(); HttpPost loginPost = new HttpPost(loginUrl);// 创建登录的Post请求 loginPost.setHeader("Cookie", Cookie);// 带上第一次请求的Cookie List<NameValuePair> nameValuePairLogin = new ArrayList<NameValuePair>();// 封装Post提交参数 nameValuePairLogin .add(new BasicNameValuePair("__VIEWSTATE", viewState));// 隐藏表单值 nameValuePairLogin .add(new BasicNameValuePair("txtUserName", stuNumber));// 学号 nameValuePairLogin.add(new BasicNameValuePair("TextBox2", password));// 密码 nameValuePairLogin.add(new BasicNameValuePair("txtSecretCode", secret));// 验证码 nameValuePairLogin.add(new BasicNameValuePair("RadioButtonList1", identityStu));// 身份,默认学生 nameValuePairLogin.add(new BasicNameValuePair("Button1", "")); nameValuePairLogin.add(new BasicNameValuePair("lbLanguage", "")); nameValuePairLogin.add(new BasicNameValuePair("hidPdrs", "")); nameValuePairLogin.add(new BasicNameValuePair("hidsc", "")); UrlEncodedFormEntity entity = new UrlEncodedFormEntity( nameValuePairLogin, "GB2312"); loginPost.setEntity(entity); HttpResponse responseLogin = client.execute(loginPost); // client1.close(); // 第三步:判断提交数据是否成功,成功返回302 if (responseLogin.getStatusLine().getStatusCode() == 302) { // 如果提交成功,带着Cookie请求重定向的main页面,并获取学生姓名 HttpGet mainGet = new HttpGet(mainUrl + stuNumber); mainGet.setHeader("Cookie", Cookie); mainGet.setHeader("Referer", loginUrl); HttpResponse responseMain = client.execute(mainGet); InputStream is = responseMain.getEntity().getContent(); String html = ""; try { html = IOUtils.getHtml(is, "GB2312"); } catch (Exception e) { System.out.println("解析html失败!"); e.printStackTrace(); } stuName = Jsoup.parse(html).getElementById("xhxm").text(); System.out.println("登录成功!欢迎您:" + stuName); client.close(); return true; } else { System.out.println("登录失败!"); client.close(); return false; } } /** * 查询空教室 * * @throws Exception * * @throws Exception */ public void queryClassroom(String xiaoqu, String xqj, String sjd) throws Exception { CloseableHttpClient client = HttpClients.createDefault(); String newQueryClassrommUrl = queryClassroomUrl + stuNumber + "&xm=" + stuName + queryClassroomGnmkdm;// 拼接请求的Url String parseSjd = ParseUtils.parseWeek(sjd);// 解析当前节次对应的字符串 String nowWeek = DateUtils.getWeek() + "";// 获取当前时间是第几周 String viewState = IOUtils.getViewState(newQueryClassrommUrl, Cookie, mainUrl + stuNumber); // 封装查询空教室请求参数 List<NameValuePair> queryClassroomPair = new ArrayList<NameValuePair>(); queryClassroomPair.add(new BasicNameValuePair("__EVENTTARGET", "")); queryClassroomPair.add(new BasicNameValuePair("__EVENTARGUMENT", "")); queryClassroomPair .add(new BasicNameValuePair("__VIEWSTATE", viewState)); queryClassroomPair.add(new BasicNameValuePair("xiaoq", xiaoqu));// 校区类型,默认西校区 queryClassroomPair.add(new BasicNameValuePair("jslb", ""));// 教室类别,默认为空 queryClassroomPair.add(new BasicNameValuePair("min_zws", "0"));// 最小座位数,默认为0 queryClassroomPair.add(new BasicNameValuePair("max_zws", ""));// 最大座位数,默认为空 queryClassroomPair.add(new BasicNameValuePair("ddlKsz", nowWeek));// 起始周,默认当前周 queryClassroomPair.add(new BasicNameValuePair("ddlJsz", nowWeek));// 结束周,默认当前周 queryClassroomPair.add(new BasicNameValuePair("xqj", xqj));// 星期几,默认当天 queryClassroomPair.add(new BasicNameValuePair("ddlDsz", ""));// 单双周,默认 queryClassroomPair.add(new BasicNameValuePair("sjd", parseSjd));// 第几节 queryClassroomPair.add(new BasicNameValuePair("Button2", "空教室查询")); queryClassroomPair.add(new BasicNameValuePair("xn", "2015-2016")); queryClassroomPair.add(new BasicNameValuePair("xq", "2")); queryClassroomPair.add(new BasicNameValuePair("ddlSyXn", "2015-2016")); queryClassroomPair.add(new BasicNameValuePair("ddlSyxq", "2")); UrlEncodedFormEntity entityClassroom = new UrlEncodedFormEntity( queryClassroomPair); HttpPost queryClassroomPost = new HttpPost(newQueryClassrommUrl); // newQueryClassrommUrl示例:http://jwgl2.ujn.edu.cn/xxjsjy.aspx?xh=20121214104&xm=XXX&gnmkdm=N121611 queryClassroomPost.setEntity(entityClassroom); queryClassroomPost.setHeader("Referer", mainUrl + stuNumber);// 设置头信息 queryClassroomPost.setHeader("Cookie", Cookie); HttpResponse responseClassroom = client.execute(queryClassroomPost); InputStream is = responseClassroom.getEntity().getContent(); String html = IOUtils.getHtml(is, "GB2312"); Document doc = Jsoup.parse(html); Elements eleClassroom = doc.select("td"); Elements eleInfo = doc.select("#lblbt"); System.out.println(eleInfo.get(0).text()); for (int i = 0; i < eleClassroom.size(); i++) { // 只打印教室名称 if (i % 8 == 1) { System.out.println(eleClassroom.get(i).text()); } } client.close(); } /** * 重载查询空教室方法,默认时间,课程节次的无参数查询方法 * * @throws IOException * @throws ClientProtocolException */ public void queryClassroom() throws ClientProtocolException, IOException, Exception { String weekDay = DateUtils.getWeekDay() + "";// 获取当前时间是星期几 String sdj = DateUtils.getNowCourse() + "";// 获取当前时间是第几节课 new Jwgl().queryClassroom(xixiaoqu, weekDay, sdj); } /** * 查询个人成绩方法 * * @throws ClientProtocolException * @throws IOException */ public void queryStuGrade(String xn, String xq) throws ClientProtocolException, IOException { CloseableHttpClient client = HttpClients.createDefault(); String newQueryStuGradeUrl = queryStuGradeUrl + stuNumber + "&xm=" + stuName + queryStuGradeGnmkd; HttpPost queryGradePost = new HttpPost(newQueryStuGradeUrl); String viewState = IOUtils.getViewState(newQueryStuGradeUrl, Cookie, mainUrl + stuNumber); // 封装请求参数 List<NameValuePair> queryGradePair = new ArrayList<NameValuePair>(); queryGradePair.add(new BasicNameValuePair("__EVENTTARGET", "")); queryGradePair.add(new BasicNameValuePair("__EVENTARGUMENT", "")); queryGradePair.add(new BasicNameValuePair("__VIEWSTATE", viewState)); queryGradePair.add(new BasicNameValuePair("hidLanguage", "")); queryGradePair.add(new BasicNameValuePair("ddlXN", xn));// 学年 queryGradePair.add(new BasicNameValuePair("ddlXQ", xq));// 学期 queryGradePair.add(new BasicNameValuePair("ddl_kcxz", "")); queryGradePair.add(new BasicNameValuePair("btn_xq", "学期成绩")); queryGradePost.setHeader("Cookie", Cookie); queryGradePost.setHeader("Referer", mainUrl + stuNumber); UrlEncodedFormEntity entityGrade = new UrlEncodedFormEntity( queryGradePair); queryGradePost.setEntity(entityGrade); HttpResponse responQueryGradePost = client.execute(queryGradePost); String gradeHtml = IOUtils.getHtml(responQueryGradePost.getEntity() .getContent(), "GB2312"); // System.out.println(gradeHtml); Document gradeDoc = Jsoup.parse(gradeHtml); Elements eleGrade = gradeDoc.select("td"); // 按需求解析html<td>标签内容并输出 for (int i = 0; i < 7; i++) { System.out.println(eleGrade.get(i).text()); } for (int i = 11; i < eleGrade.size(); i = i + 10) { if (i + 15 < eleGrade.size()) { System.out.print(eleGrade.get(i).text() + " "); i = i + 5; System.out.print(eleGrade.get(i).text()); System.out.println(); } client.close(); } } /** * 查询个人课表方法 * * @param xnd * @param xqd * @throws ClientProtocolException * @throws IOException */ public void queryStuCourse(String xnd, String xqd) throws ClientProtocolException, IOException { CloseableHttpClient client = HttpClients.createDefault(); String newQueryStuCourseUrl = queryStuCourseUrl + stuNumber + "&xm=" + stuName + queryStuCourseGnmkd; String viewState = IOUtils.getViewState(newQueryStuCourseUrl, Cookie, mainUrl + stuNumber); HttpPost queryStuCoursePost = new HttpPost(newQueryStuCourseUrl); List<NameValuePair> stuCoursePair = new ArrayList<NameValuePair>(); stuCoursePair.add(new BasicNameValuePair("__EVENTTARGET", "xqd")); stuCoursePair.add(new BasicNameValuePair("__EVENTARGUMENT", "")); stuCoursePair.add(new BasicNameValuePair("__VIEWSTATE", viewState)); stuCoursePair.add(new BasicNameValuePair("xnd", xnd)); stuCoursePair.add(new BasicNameValuePair("xqd", xqd)); UrlEncodedFormEntity entitySource = new UrlEncodedFormEntity( stuCoursePair); queryStuCoursePost.setEntity(entitySource); queryStuCoursePost.setHeader("Cookie", Cookie); queryStuCoursePost.setHeader("Referer", mainUrl + stuNumber); HttpResponse responseStuCourse = client.execute(queryStuCoursePost); String html = IOUtils.getHtml(responseStuCourse.getEntity() .getContent(), "GB2312"); Document docCourse = Jsoup.parse(html); Elements eleCourse = docCourse.select("td"); for (int i = 2; i < eleCourse.size(); i++) { System.out.print(eleCourse.get(i).text() + " "); if (i % 9 == 0) { System.out.println(); } } } public static void main(String[] args) { Jwgl jw = new Jwgl(); try { jw.login("这里是学号", "这里是密码"); System.out.println("查询成绩测试-------"); jw.queryStuGrade("2015-2016", "1"); // 查询西校区,周一,第12节空教室测试。 // jw.queryClassroom("1", "1", "2"); System.out.println("查询空教室测试------"); jw.queryClassroom(); System.out.println("查询个人课表测试-------"); jw.queryStuCourse("2014-2015", "1"); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } //QQ:451209214 } } DateUtils.java package com.ican.yueban.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DateUtils { private static String startDay = GlobalConstant.START_DAY;// 开学日期 private static String endDay = GlobalConstant.END_DAY;// 放假日期 /** * 获取当前时间是第几节课,只限8-16点之间,其他时间默认1,2节课。 * * @return */ public static int getNowCourse() { SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");// 设置日期格式 String nowDate = df.format(new Date()); if (nowDate.startsWith("08") || nowDate.startsWith("09")) { return 1;// 12节课。 } else if (nowDate.startsWith("10") || nowDate.startsWith("11")) { return 2;// 34节课,以此类推。 } else if (nowDate.startsWith("12") || nowDate.startsWith("13") || nowDate.startsWith("14")) { return 3; } else if (nowDate.startsWith("15") || nowDate.startsWith("16")) { return 4; } else { return 1; } } /** * 获取当前时间是第几周 * * @return */ public static int getWeek() { int days = 0; int nowWeek = 0; try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");// 设置日期格式 String nowDate = df.format(new Date()); int nowDaysBetween = daysBetween(startDay, nowDate) + 1; days = daysBetween(startDay, endDay); int x = nowDaysBetween % 7; if (x == 0) { nowWeek = nowDaysBetween / 7; } else { nowWeek = nowDaysBetween / 7 + 1; } } catch (ParseException e) { System.out.println("输入的日期不合法,解析日期失败"); e.printStackTrace(); } return nowWeek; } /** * 获取当前时间是星期几 * * @return */ public static int getWeekDay() { Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); if (cal.get(Calendar.DAY_OF_WEEK) - 1 == 0) { return 7; } return cal.get(Calendar.DAY_OF_WEEK) - 1; } /** * 计算两个String类型日期之间的天数 * * @param startDay * @param endDay * @return * @throws ParseException */ public static int daysBetween(String startDay, String endDay) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); cal.setTime(sdf.parse(startDay)); long time1 = cal.getTimeInMillis(); cal.setTime(sdf.parse(endDay)); long time2 = cal.getTimeInMillis(); long between_days = (time2 - time1) / (1000 * 3600 * 24); return Integer.parseInt(String.valueOf(between_days)); } /** * 以yyyy-MM-dd HH:mm:ss格式返回String类型系统时间 * * @return */ public static String getNowDate() { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式 return df.format(new Date()); } } GlobalConstant.java package com.ican.yueban.utils; /** * 本系统所有常量定义 * * @author 宋开宗 * */ public interface GlobalConstant { public static final String START_DAY = "2016-02-29"; public static final String END_DAY = "2016-07-10"; public static final String INDEX_URL = "http://jwgl2.ujn.edu.cn";// 济大教务系统首页 public static final String SECRETCODE_URL = "http://jwgl2.ujn.edu.cn/CheckCode.aspx";// 验证码页面 public static final String LOGIN_URL = "http://jwgl2.ujn.edu.cn/default2.aspx";// 济大教务系统登录页 public static final String MAIN_URL = "http://jwgl2.ujn.edu.cn/xs_main.aspx?xh=";// 济大教务系统主页,菜单页面 public static final String QUERY_CLASSROOM_URL = "http://jwgl2.ujn.edu.cn/xxjsjy.aspx?xh=";// 济大查询空教室链接 public static final String QUERY_CLASSROOM_GNMKDM = "&gnmkdm=N121611";// 济大查询空教室gnmkdm public static final String QUERY_STU_COURSE_URL = "http://jwgl2.ujn.edu.cn/xskbcx.aspx?xh=";// 济大查询个人课表链接 public static final String QUERY_STU_COURSE_GNMKDM = "&gnmkdm=N121603";// 济大查询个人课表gnmkdm public static final String QUERY_STU_GRADE_URL = "http://jwgl2.ujn.edu.cn/xscjcx.aspx?xh=";// 济大查询个人成绩链接 public static final String QUERY_STU_GRADE_GNMKDM = "&gnmkdm=N121605";// 济大查询个人成绩gnmkdm public static final String IDENTITY_STU = "学生";// 身份:学生 public static final String XIXIAOQU = "1";// 济大西校区标志 public static final String DONGXIAOQU = "2";// 济大东校区标志 public static final String ZHANGQIUXIAOQU = "3";// 济大章丘校区标志 public static final String CLASS1 = "'1'|'1','0','0','0','0','0','0','0','0'";// 1,2节 public static final String CLASS2 = "'2'|'0','3','0','0','0','0','0','0','0'";// 3,4节 public static final String CLASS3 = "'3'|'0','0','5','0','0','0','0','0','0'";// 5,6节 public static final String CLASS4 = "'4'|'0','0','0','7','0','0','0','0','0'";// 7,8节 public static final String CLASS5 = "'5'|'0','0','0','0','9','0','0','0','0'";// 8,10节 public static final String CLASS6 = "'6'|'0','0','0','0','0','11','0','0','0'";// 11,12节 public static final String CLASS7 = "'7'|'1','3','0','0','0','0','0','0','0'";// 上午 public static final String CLASS8 = "'8'|'0','0','5','7','0','0','0','0','0'";// 下午 public static final String CLASS9 = "'9'|'1','3','5','7','0','0','0','0','0'";// 白天 public static final String CLASS10 = "'10'|'0','0','0','0','9','11','0','0','0'";// 晚上 public static final String CLASS11 = "'11'|'1','3','5','7','9','11','0','0','0'";// 全天 public static final String BTN_XUEQI = "btn_xq";// 学期成绩 public static final String BTN_XUENIAN = "btn_xn";// 学年成绩 public static final String BTN_LINIAN = "btn_zcj";// 历年成绩 public static final String UNIVERSITY_CODE_UJN = "00001";// 济南大学标识代码 public static final String USER_STATE_N = "1";// 未认证 public static final String USER_STATE_Y = "2";// 认证通过 public static final String COMMENT_TYPE_NEWTHINGS = "1";// 评论类型1:新鲜事 public static final String COMMENT_TYPE_INTEREST = "2";// 评论类型2:兴趣活动 } 4. [文件] IOUtils.java ~ 5KB 下载(0) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 ?package com.ican.yueban.utils; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; import java.util.Iterator; import javax.imageio.ImageIO; import javax.imageio.ImageReadParam; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.jsoup.Jsoup; public class IOUtils { /** * 指定编码格式 ,把输入流转化为字符串 * * @param is * @return * @throws IOException */ public static String getHtml(InputStream is, String encoding) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = is.read(buffer)) != -1) { bos.write(buffer, 0, len); } is.close(); return new String(bos.toByteArray(), encoding); } /** * 下载图片 * * @param urlString * @param filename * @param savePath * @throws Exception */ public static void download(String urlString, String filename, String savePath) throws Exception { // 构造URL URL url = new URL(urlString); // 打开连接 URLConnection con = url.openConnection(); // 设置请求超时为5s con.setConnectTimeout(5 * 1000); // 输入流 InputStream is = con.getInputStream(); // 1K的数据缓冲 byte[] bs = new byte[1024]; // 读取到的数据长度 int len; // 输出的文件流 File sf = new File(savePath); if (!sf.exists()) { sf.mkdirs(); } OutputStream os = new FileOutputStream(sf.getPath() + "\\" + filename); // 开始读取 while ((len = is.read(bs)) != -1) { os.write(bs, 0, len); } // 完毕,关闭所有链接 os.close(); is.close(); } /** * 图片裁剪工具类 * * @param src * @param dest * @param x * @param y * @param w * @param h * @throws IOException */ public static void cutImage(String src, String dest, int x, int y, int w, int h) throws IOException { Iterator iterator = ImageIO.getImageReadersByFormatName("jpg"); ImageReader reader = (ImageReader) iterator.next(); InputStream in = new FileInputStream(src); ImageInputStream iis = ImageIO.createImageInputStream(in); reader.setInput(iis, true); ImageReadParam param = reader.getDefaultReadParam(); Rectangle rect = new Rectangle(x, y, w, h); param.setSourceRegion(rect); BufferedImage bi = reader.read(0, param); ImageIO.write(bi, "jpg", new File(dest)); in.close(); } /** * 判断字符编码集 * * @param str * @return */ public static String getEncoding(String str) { String encode = "GB2312"; try { if (str.equals(new String(str.getBytes(encode), encode))) { String s = encode; return s; } } catch (Exception exception) { } encode = "ISO-8859-1"; try { if (str.equals(new String(str.getBytes(encode), encode))) { String s1 = encode; return s1; } } catch (Exception exception1) { } encode = "UTF-8"; try { if (str.equals(new String(str.getBytes(encode), encode))) { String s2 = encode; return s2; } } catch (Exception exception2) { } encode = "GBK"; try { if (str.equals(new String(str.getBytes(encode), encode))) { String s3 = encode; return s3; } } catch (Exception exception3) { } return "未知"; } /** * 把输入流转换成图片---》获取验证码 * * @param is * @param filename * @param savePath * @throws Exception */ public static void getSecret(InputStream is, String filename, String savePath) throws Exception { // 1K的数据缓冲 byte[] bs = new byte[1024]; // 读取到的数据长度 int len; // 输出的文件流 File sf = new File(savePath); if (!sf.exists()) { sf.mkdirs(); } OutputStream os = new FileOutputStream(sf.getPath() + "\\" + filename); // 开始读取 while ((len = is.read(bs)) != -1) { os.write(bs, 0, len); } // 完毕,关闭所有链接 os.close(); is.close(); } /** * 获取隐藏字段的__VIEWSTATE值 * * @param url * @param cookie * @param referer * @return * @throws UnsupportedOperationException * @throws ClientProtocolException * @throws IOException */ public static String getViewState(String url, String cookie, String referer) throws UnsupportedOperationException, ClientProtocolException, IOException { CloseableHttpClient client = HttpClients.createDefault(); HttpGet getViewState = new HttpGet(url); getViewState.setHeader("Cookie", cookie); getViewState.setHeader("Referer", referer);// 设置头信息 String s = IOUtils.getHtml(client.execute(getViewState).getEntity() .getContent(), "GB2312"); String viewstate = Jsoup.parse(s).select("input[name=__VIEWSTATE]") .val(); client.close(); return viewstate; } } ParseUtils.java package com.ican.yueban.utils; public class ParseUtils { /** * 获取课程节次对应的字符串 * @param course * @return */ public static String parseWeek(String course) { String sjd=""; int nowCourse = Integer.parseInt(course); switch (nowCourse) { case 1: sjd=GlobalConstant.CLASS1; break; case 2: sjd=GlobalConstant.CLASS2; break; case 3: sjd=GlobalConstant.CLASS3; break; case 4: sjd=GlobalConstant.CLASS4; break; case 5: sjd=GlobalConstant.CLASS5; break; case 6: sjd=GlobalConstant.CLASS6; break; case 7: sjd=GlobalConstant.CLASS7; break; case 8: sjd=GlobalConstant.CLASS8; break; case 9: sjd=GlobalConstant.CLASS9; break; case 10: sjd=GlobalConstant.CLASS10; break; case 11: sjd=GlobalConstant.CLASS11; break; default: sjd=GlobalConstant.CLASS1; break; } return sjd; } }
试试其它关键字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
咏矽
贡献的其它代码
(
11
)
.
java如何获得内网ip、外网ip
.
实现文件夹及文件压缩,并实现下载(三)——文件超过15
.
过滤emoji
.
frameset页面跳转
.
动态加载dll任意路径加载dll
.
添加本地jar到私有maven仓库
.
有提示、无弹窗的复制内容
.
建立定时JOB执行存储过程
.
用img代替ajax js心跳 向服务器定时传送参数 主要计算
.
选中一定数量文字触发事件进行分享、转发
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3