【多线程数据采集之三】java抓取数据+破解屏蔽ip访问 .
来源:互联网 发布:tensorflow支持的算法 编辑:程序博客网 时间:2024/06/04 19:09
转载于: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;
- }
//门票浏览 url参数 http://www.lvmama.com/dest/lantianchengpublic 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账号","密码");
- }
- }
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访问就搞定了!
- 【多线程数据采集之三】java抓取数据+破解屏蔽ip访问 .
- java抓取数据+破解屏蔽ip访问【多线程数据采集之三】
- java抓取数据+破解屏蔽ip访问【多线程数据采集之三】
- java抓取数据+破解屏蔽ip访问【多…
- java破解ip屏蔽+多线程同步拨号-【多线程数据采集之五】
- java多线程采集+线程同步-【多线程数据采集之四】
- java多线程采集+线程同步-【多线程数据采集之四】
- java破解ip屏蔽+多线程同步
- java破解ip屏蔽+多线程同步
- java破解ip屏蔽+多线程同步
- java多线程网络数据采集
- java采集网页数据方法【多线程数据采集之一】
- java采集网页数据方法【多线程数据采集之一】
- 大数据抓取采集框架
- [Web-Harvest数据采集之二]Web-Harvest基础-抓取java代码分析
- java使用多线程进行分页数据采集
- iOS使用多线程提高数据并发访问 之三
- 抓取IP数据(一)
- VC++2012编程演练数据结构《9》平衡二叉搜索树
- java 异常丢失
- [翻译介绍]jquerymobile的页面连接(Linking pages)
- [Android]使用platform密钥来给apk文件签名的命令
- 甭想蹭网了
- 【多线程数据采集之三】java抓取数据+破解屏蔽ip访问 .
- jsp自定义标签之ifelse与遍历自定义标签实例
- jquery mobile小经验
- 学习总结
- 天易20----jquery实现复选框的全选与全不选功能
- 20条常见的编码陷阱
- jquerymobile局部渲染的各种刷新
- C++类常量以及枚举
- Smarty-内建函数(if,elseif,else)