您的位置:首页 > 编程语言 > Java开发

java抓取数据+破解屏蔽ip访问【多线程数据采集之三】

2013-11-29 15:06 393 查看
java抓取数据+破解屏蔽ip访问

今天就讲解一下,怎么破解 服务器 屏蔽ip的请求。

现在大多网站采取 ip访问次数达到一定次数就屏蔽ip的功能。

那么要破解服务器的屏蔽。 就只有改变ip, 或者代理ip。

如果用代理,哪里去找那么多ip呢。 用adsl 获取动态ip不是很简单吗。

转载注明出处:http://blog.csdn.net/column/details/threadgrab.html

那么现在就贴上adsl获取动态ip的方案实例源码

1、抓取网页数据的时候 catch异常之后 , 就采取拨号程序

[java] view
plaincopy

//门票浏览 url参数 http://www.lvmama.com/dest/lantiancheng
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;

}

七七八八网http://www.qi788.com

2、拨号获取动态ip的 工具类

[java] view
plaincopy

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);

int i = 0;

while (!bAdsl){

disconnectAdsl(adslTitle);

Thread.sleep(3000);

bAdsl = connectAdsl(adslTitle,adslName,adslPass);

Thread.sleep(3000);

if(i>5){

break;

}

}

}catch(Exception e){

logger.error("ADSL拨号异常:", e);

}

return bAdsl;

}

public static void main(String[] args) throws Exception {

// reconnectAdsl("宽带","adsl账号","密码");

}

}

采用上述办法,基本上就可以解决拨号的问题了。

如果程序加入了多线程。 那么就必须考虑多线程,拨号同步,以及数据同步问题。 提高效率和避免重复操作。

到此,破解屏蔽ip访问就搞定了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: