# HttpConnection **Repository Path**: Kagura/HttpConnection ## Basic Information - **Project Name**: HttpConnection - **Description**: SpringBoot Aop 环境下切入Jsoup或者其他私有构造类 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2018-06-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HttpConnection 本项目演示了如何利用javassist在运行时动态生成class加载到ioc容器中执行aop拦截 ### 为什么这么做? Jsoup是在爬虫工作中非常好用的一个工具,自带的请求工具org.jsoup.helper.HttpConnection也非常好用,其对外暴露为Jsoup.connect(String url);方法; 最终执行请求都是execute();方法,所以我想在execute()时执行一些日志的操作。 ### 相对原Jsoup优化了哪些? > 1 Jsoup默认Content-Type为multipart/form-data,因此如果请求体为json字符串时会URLEncoder,从而导致服务端收到后得先URLDecoder > 2 配合LoginInfo类实现cookie自动管理 > 3 随心所欲的AOP切入支持 ### 如何测试? >拉取代码后执行单元测试`HttpConnectionTest`即可看到效果 ### 为什么不能直接AOP拦截? 因为HttpConnection类只有一个private无参构造方法,所以无法直接AOP。 ### 已知情况? org.jsoup.helper.HttpConnection implements org.jsoup.Connection HttpConnection只有私有无参构造 ### 实现思路? > 1 首先创建一个抽象类me.kagura.HttpConnection实现org.jsoup.Connection接口 > 2 然后利用javassist在项目启动后@PostConstruct将org.jsoup.helper.HttpConnection复制一份org.jsoup.helper.HttpConnectionX 2.1 HttpConnectionX继承自抽象类me.kagura.HttpConnection 2.2 并将原private无参构造方法改为public 2.3 编译并加载该类 > 3 然后编写常规AOP代码即可