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版本

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM