java动态设置IP

工作需要要写一个spider访问XXX网站,但是由于我访问频率很高经常被XX网站封IP(我知道这是不道德的,但是没办法)。为了突破IP限制需要动态替换代理ip。 

代码如下: 
Java代码   收藏代码
  1. import java.io.BufferedInputStream;  
  2. import java.io.IOException;  
  3. import java.net.URL;  
  4. import java.net.URLConnection;  
  5.   
  6. import org.apache.log4j.Logger;  
  7.   
  8. /**  
  9.  * @author Jason 
  10.  * @date  Oct 27, 2010 
  11.  * @version 1.0  
  12.  */  
  13. public class TestProxyIp  {  
  14.     private static final Logger log = Logger.getLogger(TestProxyIp.class);  
  15.       
  16.     public static void main(String[] args) throws IOException {  
  17.         System.setProperty("http.maxRedirects""50");  
  18.         System.getProperties().setProperty("proxySet""true");  
  19.         // 如果不设置,只要代理IP和代理端口正确,此项不设置也可以  
  20.         String ip = "93.91.200.146";  
  21.         ip = "221.130.18.5";  
  22.         ip = "221.130.23.135";  
  23.         ip = "221.130.18.78";  
  24.         ip = "221.130.23.134";  
  25.         ip = "221.130.18.49";  
  26.         ip = "111.1.32.36";  
  27.         ip = "221.130.18.49";  
  28.         ip = "221.130.18.49";  
  29.         System.getProperties().setProperty("http.proxyHost", ip);  
  30.         System.getProperties().setProperty("http.proxyPort""80");  
  31.           
  32.         //确定代理是否设置成功  
  33.         log.info(getHtml("http://www.ip138.com/ip2city.asp"));  
  34.           
  35.     }  
  36.       
  37.     private static String getHtml(String address){  
  38.         StringBuffer html = new StringBuffer();  
  39.         String result = null;  
  40.         try{  
  41.             URL url = new URL(address);  
  42.             URLConnection conn = url.openConnection();  
  43.             conn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 7.0; NT 5.1; GTB5; .NET CLR 2.0.50727; CIBA)");  
  44.             BufferedInputStream in = new BufferedInputStream(conn.getInputStream());  
  45.               
  46.             try{  
  47.                 String inputLine;  
  48.                 byte[] buf = new byte[4096];  
  49.                 int bytesRead = 0;  
  50.                 while (bytesRead >= 0) {  
  51.                     inputLine = new String(buf, 0, bytesRead, "ISO-8859-1");  
  52.                     html.append(inputLine);  
  53.                     bytesRead = in.read(buf);  
  54.                     inputLine = null;  
  55.                 }  
  56.                 buf = null;  
  57.             }finally{  
  58.                 in.close();  
  59.                 conn = null;  
  60.                 url = null;  
  61.             }  
  62.             result = new String(html.toString().trim().getBytes("ISO-8859-1"), "gb2312").toLowerCase();  
  63.               
  64.         }catch (Exception e) {  
  65.             e.printStackTrace();  
  66.             return null;  
  67.         }finally{  
  68.             html = null;              
  69.         }  
  70.         return result;  
  71.     }  
  72. }  

运行结果如下: 


如果最后显示的IP与本机网络IP不一样说明我们达到了代理的功能,我自己的IP是 119.6.69.202 ,现在访问的IP是111.160.68.18说明成功了。 
如果按照正常想象来看显示的IP是最后一个,也就是ip = "221.130.18.49"; 结果却是111.160.68.18。我想这应该是代理服务器的原因,不过这个没有关系,达到我们想要的目的就行了。 

使用动态IP需要注意的地方: 
1、如果动态IP错误,会以本机网络IP访问。如果端口错误,会报错。 
2、代理IP哪里来呢? 我是从优易ip代理软件免费IP里找的,然后存到自己本机。如果对方封了我现在的IP,那么我就更换IP。 
Java中,设置IP白名单通常涉及到网络访问控制,特别是对于服务器端的应用程序。为了限制只允许特定IP地址的请求进入,你可以采用以下几种方法: 1. **Filtering I/O流**:使用`java.net.ServerSocket`或`java.nio.ServerSocketChannel`时,可以在创建监听套接字时设置过滤器,例如`java.net.InetAddress`的`equals()`方法检查客户端的IP是否在白名单中。 ```java ServerSocket socket = new ServerSocket(port); socket.setSoTimeout(5000); // 设置超时时间 InetAddress allowedIP = InetAddress.getByName("your whitelist IP"); Socket clientSocket; while ((clientSocket = socket.accept()) != null) { if (allowedIP.equals(clientSocket.getInetAddress())) { handleClientConnection(clientSocket); } else { clientSocket.close(); // 如果不在白名单则关闭连接 } } ``` 2. **Apache HttpClient库**:如果你正在处理HTTP请求,可以利用Apache HttpClient的拦截器机制,对每个请求的来源IP进行检查。 ```java CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("http://example.com"); httpGet.setHeader("X-Forwarded-For", "your whitelist IP"); // 检查这个头信息 CloseableHttpResponse response = httpClient.execute(httpGet); // ... 处理响应 ... httpClient.close(); ``` 3. **Spring Security**:在Spring框架下,你可以配置`HttpSecurity`来实现IP白名单,通过`AccessDecisionManager`拒绝非白名单请求。 ```java http.authorizeRequests() .antMatchers("/secret/**") .access("#oauth2.hasAnyRole('ADMIN')") .and() .requestMatchers(IPRequestMatcher.class) .permitAll() .anyRequest().authenticated(); ``` 在这个例子中,你需要自定义`IPRequestMatcher`类来检查IP地址。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值