最近最好的朋友開了個小店,木流量更木信譽,死乞白賴的要我想辦法給他刷流量,無奈朋友就是被利用的。 在不斷向廣大親朋好友推薦的同時,想身為程序猿的我應該要做些什么,於是想到能否編程刷流量,網上一大堆刷流量的軟件不敢用,搞不好店就得關門,還是自己解決吧。刷流量需要解決兩個題,一是怎樣訪問算流量;二是怎樣獲取多個IP來訪問,因為大家知道像淘寶這樣的大型商城肯定是有各種防刷機制,一個IP肯定刷不了多少,搞不好就被封了,況且一個IP刷只能增加瀏覽量而不能增加訪客數,作用還是不大。
於是我想到了兩個方法:一是用httpclient后台執行get方法打開網頁獲取數據,代碼如下:
package com.alexia; import java.io.IOException; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; public class AutoVisitSite { public static void main(String[] args) { // 訪問10次 for(int count = 1; count < 11; count++) { AutoVisit(count); } } public static void AutoVisit(int count) { HttpClient httpclient = new HttpClient(); // 設置HTTP代理IP和端口 // httpclient.getHostConfiguration().setProxy("58.252.56.149", 8080); // 代理認證(登錄名+密碼) // UsernamePasswordCredentials creds = new UsernamePasswordCredentials("root", "123456"); // httpclient.getState().setProxyCredentials(AuthScope.ANY, creds); // Get調用 GetMethod method = new GetMethod("http://alexia.taobao.com/"); method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); try { int statusCode = httpclient.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { System.out.println(statusCode + ": " + method.getStatusLine()); } else { // System.out.println(new String(method.getResponseBody(), // "GBK")); System.out.println("訪問" + count + "次!"); } } catch (IOException e) { e.printStackTrace(); } finally { // 停留3s后再關閉連接 try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } method.releaseConnection(); } } }
結果當然是不行,要是這么簡單,淘寶也可以關門了。通過淘寶的實時客戶訪問可知,淘寶是記錄每一位訪客來源的,是直接訪問的還是站外訪問的(也就是你推廣的鏈接處訪問進來),點擊站外其他可以看到具體從哪個頁面鏈接訪問進來的,如下圖所示:
所以此法不通(其實早知道了,只是還是想親身嘗試下以徹底死心)。於是想到了第二種方法:通過自動打開瀏覽器窗口訪問網站,這種方法應該是可行的,就跟你自己手動打開瀏覽器訪問網站效果一樣,而打開瀏覽器針對不同版本的JDK也有不同的方法,如下:
// 在新的瀏覽器窗口或在已有的瀏覽器窗口打開指定的URL(JDK 1.6以下) public static void openURL1(String url){ try { Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "+ url); }catch(Exception e){ e.printStackTrace(); } } // 在新的瀏覽器窗口或在已有的瀏覽器窗口打開指定的URL(JDK 1.6以上) public static void openURL2(String url){ Desktop desktop = Desktop.getDesktop(); if (Desktop.isDesktopSupported() && desktop.isSupported(Desktop.Action.BROWSE)) { URI uri = URI.create("http://lanxuezaipiao.blog.163.com/"); try { desktop.browse(uri); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
但為了打開瀏覽器后能及時關閉瀏覽器以避免產生多個窗口,我選擇了利用Java執行DOS批處理的方式,即第一種方式,但上述第一種方式是用默認瀏覽器打開,而我系統的默認瀏覽器是Firefox,為了能在刷流量的同時還能繼續上網,我決定用IE來執行刷流量的任務,批處理文件(autoVisit.bat)如下:
cd \ C: cd Program Files\Internet Explorer iexplore "http://item.taobao.com/item.htm?spm=a1z10.1.w4004-1854795698.36.SVY3Wd&id=18480249494"
然后Java調用這個批處理,代碼如下:
package com.alexia; import java.io.IOException; /** * 自動刷流量 * * @author Alexia * */ public class AutoFlux { /** * * @param count * 訪問次數 * @param seconds * 每次訪問時間 * @throws InterruptedException */ public static void flux(int count, int seconds) { Process p1 = null, p2 = null; while (count-- > 0) { try { // 執行批處理開始打開IE瀏覽器訪問 p1 = Runtime.getRuntime().exec("cmd /c autoVisit.bat"); // 訪問延時(打開瀏覽器窗口要時間的) try { Thread.sleep(1000 * seconds); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 關閉IE瀏覽器 p2 = Runtime.getRuntime().exec("taskkill /F /IM iexplore.exe"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } p1.destroy(); p2.destroy(); } } /** * @param args * @throws InterruptedException */ public static void main(String[] args) { // TODO Auto-generated method stub // 訪問10次,每次延時5s flux(2, 5); } }
你可能會想,沒必要這么麻煩把,既然是執行批處理,何必需要Java來調用執行,執行運行.bat文件不就行了嘛,的確如此,因為開始不知道批處理的延時方法,現在知道了,改用批處理方式最簡潔:
@echo off rem 首先找到IE瀏覽器的執行路徑 cd \ C: cd Program Files\Internet Explorer rem 循環10次 for /l %%i in (1,1,10) do ( rem 打開網頁並最小化窗口(不影響你當前工作) start /min iexplore "http://item.taobao.com/item.htm?spm=a1z10.1.w4004- 1854795698.36.SVY3Wd&id=18480249494" rem 延時5s choice /t 5 /d y /n >nul rem 關閉網頁 taskkill /F /IM iexplore.exe )
上面的批處理在執行時還是會出現DOS窗口的,還是有點影響不好,所以為了不顯示DOS窗口,又寫了個VB腳本:
DIM objShell set objShell=wscript.createObject("wscript.shell") iReturn=objShell.Run("cmd.exe /C autoVisit.bat", 0, TRUE)
這樣就好了,完全不影響當前工作,真正實現了刷流量的功能。
但還是有問題沒有解決:
1. 打開IE時任務欄有顯示圖標,你會看到圖標一下有一下沒,希望能夠隱藏任務欄上的IE圖標(也就是后台運行吧),經過搜索只能隱藏通知區域的圖標而無法隱藏任務欄的某個程序圖標;
2. 最關鍵的問題是如何多IP訪問(增加訪客量),這個問題我想到用代理服務器,IE可以設置代理服務器,關鍵是找不到可用的免費代理服務器,下載了個代理獵手ProxyHunter,在里面搜索了很久都搜不到一個免費的不要密碼的,全是下面這些結果:
自己在網上也找了很多代理IP,放到獵手里一驗證還是上面那些東西,沒一個可用的,所以目前還為實現多IP訪問網站的功能。
PS:如果誰有辦法解決上面的兩個問題,一定要告訴我,感激不盡!!!