在做爬虫的时候,同一ip频繁抓取有很大可能会被识别,然后被ban。因而,使用代理是很有必要的。
URLConnection 设置代理
URLConnection有两种设置方法:
- Java支持以System.setProperty的方式设置http代理及端口,如下:
System.setProperty("http.proxyHost", proxyHost);
System.setProperty("http.proxyPort", proxyPort);
// 针对https也开启代理
System.setProperty("https.proxyHost", proxyHost);
System.setProperty("https.proxyPort", proxyPort);
代理的关闭:
System.clearProperty("http.proxyPort");
System.clearProperty("http.proxyHost");
System.clearProperty("https.proxyPort");
System.clearProperty("https.proxyHost");
更多设置可以参考:https://docs.oracle.com/javase/8/docs/technotes/guides/net/properties.html
- 使用Proxy对象,在建立连接时注入到URLConnection即可:
// 初始化proxy对象
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
// 创建连接
URL u = new URL(url);
URLConnection conn = u.openConnection(proxy);
HtmlUnit 设置代理
有的时候需要支持js,这时,一种可行的解决方案是使用HtmlUnit:
WebClient webClient = new WebClient(BrowserVersion.CHROME);
ProxyConfig proxyConfig = new ProxyConfig(proxyHost, proxyPort);
webClient.getOptions().setProxyConfig(proxyConfig);