动态切换ssr科学上网节点实现可靠代理ip爬取数据

  • 利用大量ssr科学上网节点实现动态切换节点,达到动态代理爬取数据的目的

    缘由

    最近在搞某网站数据,搜刮一些数据后就会弹出滑动验证码进行验证!换ip是最方便的解决方案,但是苦于囊中羞涩买不起高质量的高匿ip,也买不起adsl动态ip服务器。某天蹲坑突然想起,自己购买了大量的ssr科学上网节点呀,是否可以利用下!

    安装配置shadowsocks

    命令行ssr客户端安装:点这儿看安装过程
    这玩意安装完程序无法使用呀,因为他是socket通讯方式,要把它变成http代理可以使用上面教程里面的polipo 也可以使用 privoxy privoxy安装教程在这

完整的运行环境已经搞成了个docker地址是这个:registry.cn-beijing.aliyuncs.com/icodebug/java8-python-ssr-privoxy:1.0

上代码

最后面有完整的demo代码链接

初始化节点

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
@Component
public class BaseInitalizer {

private static List<Shadowsocks> ssrs = new ArrayList<>();

@Autowired
public BaseInitalizer() {
System.out.println("BaseInitalizer初始化信息!!!!!");
ShellUtil.setPrivoxyConfig();//项目启动的时候需要配置下privoxy的配置文件增加个转发配置 forward-socks5t / 127.0.0.1:1080 .
ShellUtil.startPrivoxy();//启动 privoxy 服务
initSsr();
}

/**
* 初始化ssr节点
*/

public void initSsr(){
if (ssrs.size()<1){/*todo 这里增加自己的ssr代理节点信息*/
ssrs.add(new Shadowsocks("xxx.xxx.com","1111","rc4-md5","1111"));
ssrs.add(new Shadowsocks("xxx.xxx.com","1111","rc4-md5","1111"));
ssrs.add(new Shadowsocks("xxx.xxx.com","1111","rc4-md5","1111"));
ssrs.add(new Shadowsocks("xxx.xxx.com","1111","rc4-md5","1111"));

}
}

/**
* 随机获取一个ssr节点(因为封ip隔段时间会解封所以这里随机获取)
* @return
*/

public static List<String> getSsrBash(){
if (ssrs.size()>0){
return ssrs.get(RandomUtils.nextInt(0,ssrs.size()-1)).getBash();
}
return null;
}

}

切换ssr节点,干掉ssr节点,测试当前代理ip地址

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
@RestController
@RequestMapping("/ssr")
public class SsrController {
/**
* 测试当前的代理ip
* @param port
* @return
*/

@GetMapping
public ResponseEntity test(Integer port){
port = port==null?8118:port;
try {
System.getProperties().setProperty("proxySet", "true");
Document document = Jsoup.connect("https://ip.gs").proxy(ShellUtil.getLocalIp(),port).ignoreHttpErrors(true).get();
String body = document.body().text();
return ResponseEntity.ok(body);
} catch (IOException e) {
e.printStackTrace();
}
return ResponseEntity.ok("");
}


/**
* 启动代理ip
* @return
*/

@GetMapping("/start")
public ResponseEntity start(){
ShellUtil.sslocalStart();
return ResponseEntity.ok("代理已启动");
}

@GetMapping("/kill")
public ResponseEntity kill(){
ShellUtil.sslocalStop();
return ResponseEntity.ok("干死了");
}

}

完整代码在这

代码已经本地测试完工木有问题,需要注意的是代码使用前一定不要忘记自己添加些ssr节点。直接运行 build.sh 脚本自动把项目打包到docker里面启动项目。

文章目录
  1. 1. 缘由
  2. 2. 安装配置shadowsocks
  3. 3. 上代码
,