之前做的一个项目需要频繁地访问豆瓣的api,但是豆瓣api对访问次数是有限制的,同一个ip访问过于频繁就会被禁一段时间。原本可以申请api-key来放宽限制,但貌似现在豆瓣已经不开放申请了。
不仅是豆瓣api,爬取网页时也会有ip被禁的情况。这时使用代理ip就可以解决这样的问题。
所谓代理ip,也就是让别的服务器代替你发送请求,然后再把结果返回给你。直接在百度上搜索免费代理ip,就能看到一堆网页提供代理ip列表的,直接把它们的ip地址和端口复制下来就能用了。收集一定数目的可用代理ip,建立一个代理ip池,就能实现目的了。
在java中有两种使用代理ip的方式:
- 直接调用System.setProperty()方法:
System.setProperty("proxyHost",host[i]);
System.setProperty("proxyPort",port[i]);
- 创建proxy:
在建立http连接时:SocketAddress addr = new InetSocketAddress(host[0], Integer.parseInt(port[0]));
Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
URL url = new URL(访问的url);
HttpURLConnection connection = (HttpURLConnection) url.openConnection(ProxyUtil.getProxy());
connection.setRequest