免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
使用C#實(shí)現(xiàn)網(wǎng)站用戶登錄

我們?cè)趯懝嗨畽C(jī)器人、抓資源機(jī)器人和Web網(wǎng)游輔助工具的時(shí)候第一步要實(shí)現(xiàn)的就是用戶登錄。那么怎么用C#來(lái)模擬一個(gè)用戶的登錄拉?要實(shí)現(xiàn)用戶的登錄,那么首先就必須要了解一般網(wǎng)站中是怎么判斷用戶是否登錄的。

HTTP協(xié)議是一個(gè)無(wú)連接的協(xié)議,也就是說(shuō)這次對(duì)話的內(nèi)容和狀態(tài)與上次的無(wú)關(guān),為了實(shí)現(xiàn)和用戶的持久交互,網(wǎng)站與瀏覽器之前在剛建立會(huì)話時(shí)將在服務(wù)器內(nèi)存中建立一個(gè)Session,該Session標(biāo)識(shí)了該用戶(瀏覽器),每一個(gè)Session都有一個(gè)唯一的ID,第一次建立會(huì)話時(shí)服務(wù)器將生成的這個(gè)ID傳給瀏覽器,瀏覽器在接下來(lái)的瀏覽中每一個(gè)發(fā)向服務(wù)器的請(qǐng)求中都將包含該SessionID,從而標(biāo)識(shí)了自己的身份。

服務(wù)器上是使用內(nèi)存來(lái)保存Session中的信息,那么瀏覽器又使用什么來(lái)保存服務(wù)器分配的這個(gè)SessionID了?對(duì),是Cookie。在剛建立會(huì)話時(shí)瀏覽器向服務(wù)器的請(qǐng)求中將不包含SessionID在Cookie中,服務(wù)器就認(rèn)為是一個(gè)全新的會(huì)話,從而在服務(wù)器上分配一段內(nèi)存給該Session用,同時(shí)將該Session的ID在Http Header中使用Set-Cookie發(fā)送給瀏覽器。

現(xiàn)在原理已經(jīng)搞清楚了,那么我們就來(lái)實(shí)現(xiàn)一個(gè)網(wǎng)站的登錄嘛,這里就以盛大縱橫天下的登錄為例。

要寫這種面向協(xié)議的網(wǎng)絡(luò)程序,抓包工具是少不了的,我們首先是要使用抓包工具分析在普通瀏覽器中登錄時(shí)發(fā)送和接收的內(nèi)容才好進(jìn)一步使用C#來(lái)模擬瀏覽器發(fā)包。抓包工具很多,看個(gè)人愛(ài)好吧,我主要用的是HTTP Analyzer,專門針對(duì)HTTP的,太強(qiáng)的抓包工具把什么協(xié)議的包都抓出來(lái)反而不利于我們分析。

1.最好能清除IE的所有Cookie記錄,以免對(duì)抓包分析造成影響,然后開(kāi)啟抓包程序。

2.在IE中輸入http://zh.sdo.com/web1.0/home/fastlogin.asp 這個(gè)快速登錄地址,我們將看到已經(jīng)抓到了很多請(qǐng)求和響應(yīng)的包。

3.輸入用戶名和密碼,點(diǎn)擊登錄,IE中正常登錄,停止抓包,我們要的所有信息都被抓取好了。如圖:

4.盛大的登錄機(jī)制還是屬于比較復(fù)雜的,中間涉及到好幾個(gè)服務(wù)器,經(jīng)過(guò)分析得知(這個(gè)就是一個(gè)比較漫長(zhǎng)的過(guò)程了,具體網(wǎng)站具體分析,這個(gè)分析過(guò)程我就不寫了)縱橫天下的登錄機(jī)制為:

1)IE請(qǐng)求https://cas.sdo.com:80/cas/login?service=http://zh.sdo.com/web1.0/home/index.asp頁(yè)面,該頁(yè)面給IE一個(gè)SessionID,比如Set-Cookie: ASP.NET_SessionId=avcbse55l5e03suqi4dx3555; path=/

2)IE同時(shí)在該HTTP的正文中得到一個(gè)ticket,這個(gè)ticket將在登錄中有用,當(dāng)然其他網(wǎng)站肯定不是這樣做的,這里分析的是縱橫天下的。location.href    =    http://www.sdo.com/login2.asp?lt=sd-1420e593-d2cf-4c9c-b249-07fe27932a21-2008-05-06_01%3a25%3a41.484&service=http%3a%2f%2fzh.sdo.com%2fweb1.0%2fhome%2ffastlogin.asp%3ftest%3d1; 這里lt參數(shù)就是我說(shuō)的ticket了。

3)將獲得的lt、用戶名、密碼還有一些其他的無(wú)關(guān)緊要的參數(shù)都Post到https://cas.sdo.com:80/cas/Login.PostTarget.aspx?service=http://zh.sdo.com/web1.0/home/fastlogin_after.asp 中,具體抓到的Post的數(shù)據(jù)如:warn=false&_eventId=submit&idtype=0&gamearea=0&gametype=0&challenge=3623&lt=sd-1420e593-d2cf-4c9c-b249-07fe27932a21-2008-05-06_01%3A25%3A41.484&username=studyzy&password=1234&ekey=&challenge=3623,這里我們就只關(guān)心lt,username,password這三個(gè)參數(shù)。

4)獲取一個(gè)只有登錄後才能訪問(wèn)的頁(yè)面,測(cè)試是否登錄成功。

5.好,整個(gè)登錄機(jī)制我們已經(jīng)分析完了,接下來(lái)就是考慮代碼的實(shí)現(xiàn)了。在面向HTTP協(xié)議上,C#中有WebRequest、WebResponse、HttpWebRequest和HttpWebResponse等類。我們主要就基于這些類進(jìn)行操作,當(dāng)然完全基于Socket編程也可以,但是這里就沒(méi)有這個(gè)必要了。

在不設(shè)置Cookie、PostData的情況下要獲得一個(gè)頁(yè)面的HTML的方法很簡(jiǎn)單:

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();
        }
 

 

當(dāng)需要獲得服務(wù)器返回的Cookie的話,可以通過(guò)wrp.Headers.Get("Set-Cookie")方法來(lái)獲取。

如果需要將Cookie加入到請(qǐng)求另外還Post數(shù)據(jù)的話其實(shí)也很簡(jiǎn)單,只需要將httpWebRequest對(duì)象中設(shè)置ContentLength 和Request的Stream就可以了。

httpWebRequest.ContentLength = byteRequest.Length;
Stream stream;
stream 
= httpWebRequest.GetRequestStream();
stream.Write(byteRequest, 
0, byteRequest.Length);
stream.Close(); 

 

代碼我就不都貼出了,我做了一個(gè)Demo在附件中,大家有興趣研究的可以看一下。 /Files/studyzy/LoginSdoDemo.rar

代碼中實(shí)現(xiàn)了盛大賬號(hào)的登錄,其實(shí)縱橫天下的登錄還沒(méi)有完成,接下來(lái)還有選擇具體服務(wù)器,將ticket轉(zhuǎn)到具體服務(wù)器上再進(jìn)行驗(yàn)證,原理也是一樣的,我這里就不再累述了。

成功登錄后,接下來(lái)我們只需要每次發(fā)送請(qǐng)求是跟上該Cookie,服務(wù)器就認(rèn)為是登錄的用戶在操作了,接下來(lái)就可以隨便灌水、Download資源了,具體要做什么就大家自己弄了,只需要在IE中操作一篇,抓包分析出來(lái),用C#實(shí)現(xiàn)同樣的發(fā)包就OK!

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
瀏覽器關(guān)閉使session失效的問(wèn)題多種解決方式
python中session和cookie有什么區(qū)別?
session和cookie在PHP中的區(qū)別
Cookie和Session專題
php中session和cookie的一些資料整理
網(wǎng)絡(luò)請(qǐng)求中的cookie與set
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服