4)獲取一個只有登錄後才能訪 問的頁面,測試是否登錄成功。
5.好,整個登錄機制我們已經分析完了,接下來就是 考慮代碼的實現了。在面向HTTP協議上,C#中有WebRequest、WebResponse、HttpWebRequest 和HttpWebResponse等類。我們主要就基於這些類進行操作,當然完全基於Socket編程也可以 ,但是這裡就沒有這個必要了。
在不設置CookIE、PostData的情況下要獲得一個頁面 的Html的方法很簡單:
public static string GetHtml(string URL)
{
WebRequest wrt;
wrt = WebRequest.Create(URL);
wrt.Credentials = CredentialCache.DefaultCredentials;
WebResponse wrp;
wrp = wrt.GetResponse();
return new StreamReader (wrp.GetResponseStream(), Encoding.Default).ReadToEnd();
}
當需要獲得服務器返回的Cookie的話,可以通過wrp.Headers.Get ("Set-CookIE")方法來獲取。
如果需要將CookIE加入到請求另外還Post數 據的話其實也很簡單,只需要將httpWebRequest對象中設置ContentLength 和Request的 Stream就可以了。
httpWebRequest.ContentLength = byteRequest.Length;
Stream stream;
stream = httpWebRequest.GetRequestStream();
stream.Write(byteRequest, 0, byteRequest.Length);
stream.Close();
代碼我就不都貼出了,我做了 一個Demo在附件中,大家有興趣研究的可以看一下。
代碼中實現了盛大賬號的登錄, 其實縱橫天下的登錄還沒有完成,接下來還有選擇具體服務器,將ticket轉到具體服務器上 再進行驗證,原理也是一樣的,我這裡就不再累述了。
成功登錄後,接下來我們只需 要每次發送請求是跟上該CookIE,服務器就認為是登錄的用戶在操作了,接下來就可以隨便 灌水、Download資源了,具體要做什麼就大家自己弄了,只需要在IE中操作一篇,抓包分析 出來,用C#實現同樣的發包就OK!