程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 自動投票器的原理及設計思路

自動投票器的原理及設計思路

編輯:.NET實例教程

自動投票器的原理及設計思路
___________________________
羅坤凡 2008-01-12

    網絡投票和平時浏覽網頁、登陸郵箱一樣,都是客戶端和網站服務器之間的通訊過程。客戶端發出信息請求,服務器端收到信息後根據後台程序作出相應的反饋,客戶端收到反饋信息後再顯示出來。

    手工投票時,客戶端電腦打開IE,點擊投票按鈕,IE就會發送一定的信息到服務器,服務器收到信息後進行處理,再將結果反饋回客戶端的IE,用戶就會在IE中看到投票是否成功的信息。

    自動投票器的原理就是循環模擬手動投票的過程,大致分為以下幾個步驟:

    1、打開IE手動投票,使用專門工具獲取投票時IE往服務器提交的信息。

    2、分析信息得到提交的網址、提交的數據等。

    3、編程模擬手動投票往服務器發送投票信息,循環發送信息就可以達到快速投票。

    獲取信息和分析信息在Outdovote通用網絡自動投票器的說明文件裡有,這裡就不再說了,下面講講Microsoft Visual Studio 2005 C#如何編程模擬手工投票發送信息。

假如投票時獲取的數據如下:

POST /generalvote/webvote/savevote.ASP HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-Flash, application/vnd.ms-Excel, application/vnd.ms-PowerPoint, application/msWord, */*
Referer: http://www.outDOSz.cn/generalvote/webvote/vote.ASP
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .Net CLR 2.0.50727)
Proxy-Connection: Keep-Alive
Content-Length: 42
Host: www.outDOSz.cn
Pragma: no-cache
CookIE: ASPSESSIONIDAACTDRCR=CHAMMJLDMCKFLLLOIADDFPGK; ASPSESSIONIDAACQASDR=PHILKNLDIPNPCOCDMAFANJFB; ASPSESSIONIDCACTCTBR=MJAAAGMDBFKLAFOGKDDCKEED

citygroup=%C7%E0%B5%BA&submit=%CC%E1%BD%BB

那麼如何用編程來發送這樣的數據呢,C#有個WebClIEnt類,這個類非常好用,我們就用它來實現發送投票信息。

WebClIEnt類可以自定義HTTP Headers屬性(設置HTTP頭信息),使用UploadData函數就可以POST數據到服務器,關於WebClIEnt類的更多信息,請參考MSDN。

C#代碼如下:

WebClient myWebClient = new WebClient();//申明並創建WebClient實例myWebClIEnt
byte[] byteArray;//申明存儲提交數據的變量
byte[] response

$False$

Array;//申明存儲接收數據的變量

//設置HTTP頭信息,並非所以的信息都需要設置,以下這些信息足夠了
myWebClIEnt.Headers.Add("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-Flash, application/vnd.ms-Excel, application/vnd.ms-PowerPoint, application/msWord, */*");
myWebClIEnt.Headers.Add("Referer", "http://www.outDOSz.cn/generalvote/webvote/vote.ASP");
myWebClIEnt.Headers.Add("Accept-Language", "zh-cn");
myWebClIEnt.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
myWebClIEnt.Headers.Add("Accept-Encoding", "gzip, deflate");

byteArray = Encoding.Default.GetBytes(voteDATA);//將提交的數據轉化為byte數組

try
{
    responseArray = myWebClIEnt.UploadData("http://www.outDOSz.cn/generalvote/webvote/savevote.ASP", "POST", byteArray);//提交投票信息,並獲取返回的數據
}
catch (Exception exPOST)
{
    errorMessage = "\nPOST方式投票時出現錯誤,錯誤信息為:" + exPOST.Message;
    myWebClient.Dispose();//釋放myWebClIEnt所占用的資源
    return false;//提示錯誤信息並返回。
}
myWebClient.Dispose();//釋放myWebClIEnt所占用的資源
outputMessage = "\n接收的正文信息:\n";
outputMessage = outputMessage + Encoding.Default.GetString(responseArray);
return true;

將以上代碼封裝在一個函數中,然後做個循環就可以實現連續投票了。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved