转载于:http://blog.csdn.net/yjflinchong/article/details/8156743
今天就讲解一下,怎么破解 服务器 屏蔽ip的请求。
现在大多网站采取 ip访问次数达到一定次数就屏蔽ip的功能。
那么要破解服务器的屏蔽。 就只有改变ip, 或者代理ip。
如果用代理,哪里去找那么多ip呢。 用adsl 获取动态ip不是很简单吗。
转载注明出处:http://blog.csdn.net/column/details/threadgrab.html
那么现在就贴上adsl获取动态ip的方案实例源码
1、抓取网页数据的时候 catch异常之后 , 就采取拨号程序
//门票浏览 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;
}
2、拨号获取动态ip的 工具类
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访问就搞定了!