zoukankan      html  css  js  c++  java
  • JAVA刷新网站IP访问量的技术探讨

    通过JAVA程序刷新网站的IP访问量,我用到的技术要点:用SWT的browser来访问网站url,用xpcom来修改Mozilla的代理IP。

           为了实现这样一个目标,过程是一波三折的。

    首先我先用URL openConnection获得HttpURLConnection的方式,网页的内容是获取到了,可是通过51la检查网站,发现没有增加IP(确定已重新启动陆由获取新IP)。于是这种方式被我放弃。

    HttpURLConnection方式的大致代码:

           String urlstr = "http://www.soarwell.com";

            URL url = new URL(urlstr); 

            HttpURLConnection con = (HttpURLConnection) url.openConnection(); 

     

            InputStream is = con.getInputStream();

            InputStreamReader isr = new InputStreamReader(is,"ISO-8859-1");

            String result = ""; 

            int read; 

            while ((read = isr.read()) != -1) { 

                result += (char) read; 

            } 

            isr.close(); 

        result = new String(result.toString().getBytes("ISO-8859-1"), "GBK");

    接着尝试用SWT的browser,换IP后,用browser方式是刷新了网站IP。Browser方式的大致代码:

                //将结果在浏览器上显示

               Display display = new Display();

               final Shell shell = new Shell(display);

               FillLayout layout = new FillLayout();

               shell.setLayout(layout);

               Browser browser = new Browser(shell, SWT.MOZILLA); //1

               browser.setUrl("www.soarwell.com");          

               shell.open();       

               while (!shell.isDisposed()) {

                  if (!display.readAndDispatch())

                      display.sleep();

               }     

           display.dispose();

    可是IP只有一个,总不能不停的拨号吧?于是尝试用代理IP方式。

    System.getProperties().setProperty("proxySet", "true");         System.getProperties().setProperty("http.proxyHost", IP);  

        System.getProperties().setProperty("http.proxyPort", PORT);

    设置完代理后,不管是用HttpURLConnection还是browser,刷新的总是我自己的IP,而不是代理的IP,想通过切换代理IP的方式达到刷新网站IP访问量的目的没达到。

    到处搜索,发现网上的内容抄来抄去,大同小异,绝望之时,简要浏览了IBM裴娜的 “在Java程序中内嵌 Mozilla 浏览器”,发现可以通过 JavaXPCOM 为浏览器组件设置用户代理,代码如下:

    Mozilla Mozilla = Mozilla.getInstance();   

    nsIServiceManager serviceManager = Mozilla.getServiceManager();  

    String contractID = "@Mozilla.org/preferences-service;1";

    nsIPrefService prefService = (nsIPrefService) serviceManager.getServiceByContractID(

    contractID, nsIPrefService.NS_IPREFSERVICE_IID);  

    nsIPrefBranch branch = prefService.getBranch("");  

    branch.setCharPref("network.proxy.http", "127.0.0.1");  

    branch.setIntPref("network.proxy.http_port", 8080);  

     

    于是我用JAVA程序刷新网站IP访问量的方案形成:用记事本收集有用的代理IP和端口;用JavaXPCOM动态修改Mozilla的代理设置;用swt的browser动态切换网站url。

       

        在动态设置浏览器代理IP的时候,要把network.proxy.type设置为1。设置network.http.connect.timeout也很重要

           nsIPrefBranch branch = prefService.getBranch("");

           branch.setIntPref("network.proxy.type", 1);  //1使用代理             branch.setCharPref("network.proxy.http", sProxyIp);

           branch.setIntPref("network.proxy.http_port", iProxyPort);  

           branch.setIntPref("network.http.connect.timeout", 4);

     

    我开发后的大致功能:

         可以设置多个代理IP,可以设置多个要访问的网站,设置好间隔时间后,就可以启动看效果。测试自己网站的访问量,通过51la查看,程序刷新IP已经起了作用:

     

    运行一段时间,51la收到效果:

    遇到的问题:

    我在网上找到400多个可用的代理IP,真的要刷起网站来这个量太少,这样就意味着这个方案很难有大作为,只能给一些小产品做长期的刷流量,比如刷网站、博客的访问量。

    在访问某些网站的时候会出现:R6025 pure virtual function call的错误提示,而且并不是总出现,暂时没找到问题所在。怀疑是XULRunner的版本问题。

     

    有时候会弹出提示:the connection was resused when attempting to contact the proxy server you have configureed. please check your proxy settings and try again。这个应该是mozilla的提示,研究了好久也没找到什么选项设置后可以不提示。

     

    要注册XULRunner,而且版本跟swt中使用的javaxpcom.jar要一致,否则可能会出现Could not detect registered XULRunner to use的问题。

    参考的资源:

    在Java程序中内嵌 Mozilla 浏览器

    XULRunner with Java: JavaXPCOM Tutorial 1

    Firefox火狐config配置中文对照

    下载xulrunner:ftp://ftp.mozilla.org/,我用的还是1.8.1.3版本

  • 相关阅读:
    十二、React 生命周期函数
    十一、React 获取服务器数据: axios插件、 fetch-jsonp插件的使用
    备份CSDN
    十、React 父组件传来值的类型控制propTypes、父组件如果不传值defaultProps
    九、React中的组件、父子组件、React props父组件给子组件传值、子组件给父组件传值、父组件中通过refs获取子组件属性和方法
    phpStudy配置多站点多域名和多端口的方法
    八、8.2自写模块,引入及使用(封装)
    八、React实战:可交互待办事务表(表单使用、数据的本地缓存local srtorage、生命同期函数(页面加载就会执行函数名固定为componentDidMount()))
    七、React表单详解 约束性和非约束性组件 input text checkbox radio select textarea 以及获取表单的内容
    索引原理与数据库优化
  • 原文地址:https://www.cnblogs.com/soarwell/p/3397439.html
Copyright © 2011-2022 走看看