程式|投票
最近有個朋友 讓我幫他線上投票,因為網站是限制IP的(這裡其實是騙人的),我就幫他點了一下,可是我突然發現,第一名的投票數比後面的人多的很多,大概差3-4百票吧。我就覺得,第一個人肯定是找人幫忙投票了,但是這樣就失去了投票本身的意義了。於是我就想故意搞惡一下。想到寫一個自動投票的程式來完成。(算不算以暴制暴啊?)
我分析了投票的網站,上面說是限制IP的,但是根據我的分析,並不是限制IP,而是使用了COOKIES記錄的投票的資訊,而如果你清除了COOKIES就可以再投票了,不過這樣需要每次去手動調整IE的參數,累都累死了。於是,我想能不能自動刪除COOKIES並且自動認可頁面提交呢?
通過以上的分析,我們知道了,作這個程式,需要兩個環節:
1、自動清除COOKIES
2、自動認可表單
首先我們先看看第一個
我查詢了,MSDN的網站,裡面有個HI Script的專欄。介紹了很多執行WINDOWS指令碼的技術,其中就有關於如何操作IE臨時檔案夾和COOKIES目錄的功能。
http://www.microsoft.com/china/technet/community/scriptcenter/resources/hey1102.mspx
根據裡面的方法,我在C#中寫出了以下代碼,用來刪除COOKIES,要注意的是,其中的index.dat檔案是無法刪除的,所以我作了一個處理,刪除了除他以為的所有內容,代碼如下:
const int cookies = 33;
Shell32.Folder objFolder;
Shell32.FolderItems objFolderItems;
Shell32.ShellClass objShell;
objShell = new Shell32.ShellClass();
objFolder = objShell.NameSpace(cookies);
objFolderItems = objFolder.Items();
foreach(Shell32.FolderItem objFolderItem in objFolderItems)
{
if(!"index.dat".Equals(objFolderItem.Name.ToLower()))
{
File.Delete(objFolderItem.Path.ToString());
}
}
第一步解決了,該解決第二個問題了,我查詢了一些資料。發現有兩種方式可以解決我的問題
1、使用WebClient
這種方式是直接執行類似頁面提交的方式,進行頁面的控制,並且可以返回提交結果頁的內容,速度快。
2、使用WebBrowser
這種方式類似於自己做了一個瀏覽器,然後控制頁面中的對象進行提交。這樣的速度有點慢。
所以我決定用第一種方式,代碼如下:
WebClient wc = new WebClient();
string postData = "username=xxx"
wc.Headers.Add("Content-Type","application/x-www-form-urlencoded");
byte[] bReturn = wc.UploadData("http://www.xxx.xxx/vote.asp","POST",Encoding.Default.GetBytes(postData));
//MessageBox.Show(Encoding.Default.GetString(bReturn));
wc.Dispose();
看到了吧,這樣就可以了。
剩下就是在用一個timer來迴圈執行就可以了。
哈哈,一切都是這麼簡單。不過還是覺得這麼做有背公平的原則。希望大家不要用到不好的地方,當然用於懲戒作弊的人除外