给Jsoup设置代理
本文介绍如何给Jsoup增加代理,主要有两类原因需要增加代理:
组织提供代理控制内部访问,如果在本地代理网络中通过Jsoup访问,会抛出异常:
java.net.SocketTimeoutException: connect timed out
;当见到该异常时,我们需要给Jsoup设置代理,否则不能访问外部网络。防止IP被封:另外一种情况是防止网站封锁我们的IP地址。也就是说,使用代理(多个滚动代理)可以更可靠解析HTML,避免因为封锁IP地址让代码停止运行。
增加依赖
Maven依赖:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
Gradle依赖:
compile 'org.jsoup:jsoup:1.13.1'
增加代理
有两种方法给Jsoup增加代理支持。
基于属性增加
给Jsoup增加代理很容易,直接在Connection对象上调用proxy(String, int)方法:
Jsoup.connect("https://spring.io/blog")
.proxy("127.0.0.1", 1080)
.get();
第一个参数为主机地址,另一个是端口号。
基于Proxy类增加
我们也可以通过Proxy类实现,在Connection对象上调用它的proxy(java.net.Proxy)方法:
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 1080));
Jsoup.connect("https://spring.io/blog")
.proxy(proxy)
.get();
此方法接受一个Proxy对象,该对象由代理类型(通常为HTTP类型)和InetSocketAddress(封装代理主机名和端口属性的包装类)组成。