前言
LightWeightProxyServer后端项目讲解,这里会挑最核心,最重要的部分进行讲解,基础的部分就当你会,不会的话,找度娘。
一、本地调试
下载最新的LightWeightProxyServer,以前的本地启动多个代理ip,调试的时候是有问题的,已经改好提交了。启动LightWeightProxyServer,使用ipagent项目下代码进行调试。
更改成本地的ip以及开启的端口
使用http://dev.kdlapi.com/testproxy调试http请求,https://dev.kdlapi.com/testproxy调试https请求
发送请求,都返回200,就可以开始调试代码了
二、核心的目录及文件介绍
三、sqlite
sqlite存储的LightWeightProxyServer项目的所有的数据,项目中SpringBoot集成了sqlite,启动的Springboot项目的时候,需要了解sqlite初始化的过程
先连接sqlite,LightWeightProxyServer项目下面有个pro.db文件,这个就是 sqlite存储的数据,使用Navicat,新建连接,选择SQLite,在新建连接的窗口中有个数据库文件,选择LightWeightProxyServer项目下的pro.db文件,点击测试连接,就可以连接成功。进入可以看到里面表格及数据
application-dev.yml文件里面有sqlite的数据源配置,在springboot启动的时候,会自动读取schema.sql文件内容,初始化表。接着自动读取data.sql文件内容,初始化数据。如果项目中需要新增加表,就往schema.sql文件加创表语句可以了,如果需要初始化数据,就往data.sql文件内容添加insert的sql语句就行了
sqlite与mybaitsplus结合操作数据源,跟mysql在dao、service、serviceImp里面的写法都一样的,使用起来也很方便的
四、ip代理核心过程
可以看出JobRunner实现了CommandLineRunner,在springboot启动之后执行的。接着看看run方法里面逻辑吧。用户表里面没有admin账号,就创建一个,密码也是admin。将白名单存储缓存里面,查看process_config_t表里面的数据,有几条就开启几个线程,每个线程都是Socket服务器,对应监听响应的端口。
接收客服端的请求的时候,使用线程池去处理
将客服端(浏览器、其他程序)字节码的请求转化HttpRequestMessage,封装下,为判断http与https方式以及有时候需要更改header头部请求信息作准备
http请求的数据
https请求的数据
Proxy类里面就封装了将请求转化的核心逻辑
如果method是Connected请求,走https方式,其他的走http
http方式,将请求转发给服务器,然后把服务器响应内容,给客服端(dev.kdl.com)
封装成服务器能识别的http请求方式
toString结果
写入socket
https方式,要注意,this.proxyHttps(); 这个方法直接走的ServerProxy的proxyHttps方法,而不是父类Proxy的proxyHttps方法。下面用请求方是浏览器说明(容易理解,请求方不一定就是浏览器哦)
开启两个线程,一个不断从浏览器读取数据,读取的数据写给目标端(dev.kdl.com)。另一个不断从目标端(dev.kdl.com)读取数据,写给浏览器
五、控制层
最重要的就ProcessConfigTController里面的代码呢,新增,修改端口,删除的代理ip时候,程序怎么处理,可以去看下,也不难,就不多说了
总结
以上就是今天要讲的内容,LightWeightProxyServer的后端项目讲解,第一去看代码逻辑,可能会有点晕,多调试几次,里面的代码逻辑就很清新了。代理ip的内容就已经全部完结了,以后在java爬取数据的篇章中会涉及到代理ip内容。