当前位置:编程学习 > JAVA >>

[多线程数据采集]java抓取数据+破解屏蔽ip访问

java抓取数据+破解屏蔽ip访问
今天就讲解一下,怎么破解 服务器 屏蔽ip的请求。
现在大多网站采取 ip访问次数达到一定次数就屏蔽ip的功能。
那么要破解服务器的屏蔽。 就只有改变ip, 或者代理ip。
如果用代理,哪里去找那么多ip呢。  用adsl 获取动态ip不是很简单吗。
 那么现在就贴上adsl获取动态ip的方案实例源码

1、抓取网页数据的时候  catch异常之后 , 就采取拨号程序
[java] 
//门票浏览  url参数
    public static DataBean getWebData1(String url){ 
        DataBean data = null; 
        try { 
            Document docdata = Jsoup.connect(url).timeout(20000).get(); 
             
        } catch (Exception e) { 
            e.printStackTrace(); 
                        //拨号一下 
                        ConnectAdslNet.reconnectAdsl("宽带",Main.adslname,Main.adslpass); 
        } 
        return data; 
    } 


2、拨号获取动态ip的 工具类
[java] 
import java.io.BufferedReader; 
import java.io.InputStreamReader; 
 
import org.apache.log4j.Logger; 
 
/**
 * 
 * ADSL拨号上网
 * Windwos操作系统需要是GBK编码
 * @author yijianfeng
 * 
 */ 
 
public class ConnectAdslNet { 
    static Logger logger = Logger.getLogger(ConnectAdslNet.class); 
     
     /** 
     * 执行CMD命令,并返回String字符串 
     */   
    public static String executeCmd(String strCmd) throws Exception {   
        Process p = Runtime.getRuntime().exec("cmd /c " + strCmd);   
        StringBuilder sbCmd = new StringBuilder();   
         
        //注意编码 GBK 
        BufferedReader br = new BufferedReader(new InputStreamReader(p   
                .getInputStream(),"GBK"));   
        String line;   
        while ((line = br.readLine()) != null) {   
            sbCmd.append(line + "\n");   
        }   
        return sbCmd.toString();   
    }   
   
    /** 
     * 连接ADSL 
     */   
    public static boolean connectAdsl(String adslTitle, String adslName, String adslPass) throws Exception {   
        System.out.println("正在建立连接.");   
        String adslCmd = "rasdial " + adslTitle + " " + adslName + " "   
                + adslPass;   
        String tempCmd = executeCmd(adslCmd);   
         
        // 判断是否连接成功   
        if (tempCmd.indexOf("已连接") > 0) {   
            System.out.println("已成功建立连接.");   
            return true;   
        } else {   
            System.out.println(tempCmd);   
            System.out.println("建立连接失败");   
            return false;   
        }   
    }   
   
    /** 
     * 断开ADSL 
     */   
    public static boolean disconnectAdsl(String adslTitle) throws Exception {   
        String disconnectAdsl = "rasdial " + adslTitle + " /disconnect";   
        String result = executeCmd(disconnectAdsl);        
          
        if (result.indexOf("没有连接")!=-1){   
            System.out.println(adslTitle + "连接不存在!");   
            return false;   
        } else {   
            System.out.println("连接已断开");   
            return true;   
        }   
    }   
     
    /**
     * adsl重新拨号,支持失败不断重拨
     * @param args
     * @throws Exception
     */ 
    public static boolean reconnectAdsl(String adslTitle, String adslName, String adslPass){ 
        boolean bAdsl = false; 
        try { 
            disconnectAdsl(adslTitle);  
            Thread.sleep(3000);          
            bAdsl = connectAdsl(adslTitle,adslName,adslPass); 
            Thread.sleep(3000); 
  

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,