最近有個朋友 讓我幫他在線投票,因為站點是限制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來循環執行就可以了。
哈哈,一切都是這么簡單。不過還是覺得這么做有背公平的原則。希望大家不要用到不好的地方,當然用于懲戒作弊的人除外
中國最大的web開發資源網站及技術社區,新聞熱點
疑難解答