java抓取資料+破解屏蔽ip通路
今天就講解一下,怎麼破解 伺服器 屏蔽ip的請求。
現在大多網站采取 ip通路次數達到一定次數就屏蔽ip的功能。
那麼要破解伺服器的屏蔽。 就隻有改變ip, 或者代理ip。
如果用代理,哪裡去找那麼多ip呢。 用adsl 擷取動态ip不是很簡單嗎。
那麼現在就貼上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 + "連接配接不存在!");
System.out.println("連接配接已斷開");
/**
* @param args
* @throws Exception
*/
public static boolean reconnectAdsl(String adslTitle, String adslName, String adslPass){
boolean bAdsl = false;
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);
if(i>5){
break;
}
}
}catch(Exception e){
logger.error("ADSL撥号異常:", e);
return bAdsl;
public static void main(String[] args) throws Exception {
// reconnectAdsl("寬帶","adsl賬号","密碼");
}
}
采用上述辦法,基本上就可以解決撥号的問題了。
如果程式加入了多線程。 那麼就必須考慮多線程,撥号同步,以及資料同步問題。 提高效率和避免重複操作。
到此,破解屏蔽ip通路就搞定了!
本文轉自yjflinchong 51CTO部落格,原文連結:http://blog.51cto.com/yjflinchong/1165154,如需轉載請自行聯系原作者