java okhhtp下载学信网学籍信息
学信网的登录有验证码,是那种计算数字或者汉字识别的,很难识别。最近连学籍信息和学历信息也换成图片了,常规的正则 css xpath都不能使。
下载图片,需要先登录,获取登陆后的cookie和学籍信息的图片url。这一步由webview获得,用户自行登录,不需要理会验证码。
使用okhttp。需要导入这两个包。
package com.touna.httprequest; import java.io.File; import java.io.FileOutputStream; import java.util.concurrent.TimeUnit; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class HttpReq { //private OkHttpClient client = new OkHttpClient(); private final Request.Builder builder = new Request.Builder(); private final OkHttpClient client = new OkHttpClient.Builder() .readTimeout(30, TimeUnit.SECONDS) .connectTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .build(); //设置各种超时时间 /** @param isAddXuexinHeader 是否加入学信网header到请求头 */ public HttpReq(boolean isAddXuexinHeader){ if (isAddXuexinHeader == true){ builder.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); builder.addHeader("Accept-Encoding","gzip, deflate, sdch, br"); builder.addHeader("Accept-Language","zh-CN,zh;q=0.8"); builder.addHeader("Cache-Control","max-age=0"); builder.addHeader("Connection","keep-alive"); builder.addHeader("Host","my.chsi.com.cn"); builder.addHeader("If-Modified-Since","Tue, 13 Mar 2018 10:14:31 GMT"); builder.addHeader("Upgrade-Insecure-Requests","1"); builder.addHeader( "User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"); } } /** @param cookie 加入cookie到请求头 */ public void addCookieToHeader(String cookie){ builder.addHeader("cookie",cookie); } /** @param url get请求的url */ public String get(String url) { builder.url(url); final Request request = builder.build(); try (Response response = client.newCall(request).execute()) { return response.body().string(); }catch (Exception e){ e.printStackTrace(); return ""; } } /** @param url 图片的地址 * */ public void savePicture(String url) { builder.url(url); final Request request = builder.build(); try (Response response = client.newCall(request).execute()) { byte[] bt = response.body().bytes(); byte2image(bt, "./xueji.png"); }catch (Exception e){ e.printStackTrace(); } } private void byte2image(byte[] data,String path){ try { File file = new File(path); FileOutputStream fos = new FileOutputStream(file); fos.write(data, 0, data.length); fos.flush(); fos.close(); System.out.println("保存图片成功。。"); } catch (Exception e) { e.printStackTrace(); } } public static void testBaidu(){ HttpReq baiduHttp = new HttpReq(false); String respStr = baiduHttp.get("http://www.baidu.com"); System.out.println(respStr); } public static void main(String[] args) { // testBaidu(); HttpReq xuexinHttp = new HttpReq(true); xuexinHttp.addCookieToHeader("JSESSIONID=06E39F1AE8D1EA9BFD8F34D"); //由webview执行js返回。 xuexinHttp.savePicture("https://my.chsi.com.cn/archive/gdjy/photo/show.action?pid=2367c5f88b78b088e484a51eb3"); //由webview执行js返回。
}
}
反对极端面向过程编程思维方式,喜欢面向对象和设计模式的解读,喜欢对比极端面向过程编程和oop编程消耗代码代码行数的区别和原因。致力于使用oop和36种设计模式写出最高可复用的框架级代码和使用最少的代码行数完成任务,致力于使用oop和设计模式来使部分代码减少90%行,使绝大部分py文件最低减少50%-80%行的写法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」