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。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章