基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览实例
本文实例讲述了基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览的方法。分享给大家供大家参考。具体分析如下:
一、问题:
我们在一些场合经常需要模拟浏览器进行一些操作,比如模拟投票,或者模拟点击,或者Web游戏外挂。
二、解决方法:
C#中封装好的WebClient可以在某些要求不算高的场景实现Http的Post和Get。具体请见如下代码:
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Net;
namespaceTestCNM { publicclassWebClientExt { publicstringGet(stringUrl,stringReferer,EncodingEncoder,refstringCookieStr) { stringresult=""; WebClientmyClient=newWebClient(); myClient.Headers.Add("Accept:*/*"); myClient.Headers.Add("User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;Trident/4.0;.NET4.0E;.NET4.0C;InfoPath.2;.NETCLR2.0.50727;.NETCLR3.0.04506.648;.NETCLR3.5.21022;.NETCLR3.0.4506.2152;.NETCLR3.5.30729;SE2.XMetaSr1.0)"); myClient.Headers.Add("Accept-Language:zh-cn"); myClient.Headers.Add("Content-Type:multipart/form-data"); myClient.Headers.Add("Accept-Encoding:gzip,deflate"); myClient.Headers.Add("Cache-Control:no-cache"); if(CookieStr!="") { myClient.Headers.Add(CookieStr); } myClient.Encoding=Encoder; result=myClient.DownloadString(Url); if(CookieStr=="") { CookieStr=myClient.ResponseHeaders["Set-Cookie"].ToString(); CookieStr=GetCookie(CookieStr); } returnresult; } publicstringPost(stringUrl,stringReferer,EncodingEncoder,refstringCookieStr,stringData) { stringresult=""; WebClientmyClient=newWebClient(); myClient.Headers.Add("Accept:*/*"); myClient.Headers.Add("User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;Trident/4.0;.NET4.0E;.NET4.0C;InfoPath.2;.NETCLR2.0.50727;.NETCLR3.0.04506.648;.NETCLR3.5.21022;.NETCLR3.0.4506.2152;.NETCLR3.5.30729;SE2.XMetaSr1.0)"); myClient.Headers.Add("Accept-Language:zh-cn"); myClient.Headers.Add("Content-Type:multipart/form-data"); myClient.Headers.Add("Accept-Encoding:gzip,deflate"); myClient.Headers.Add("Cache-Control:no-cache"); if(CookieStr!="") { myClient.Headers.Add(CookieStr); } myClient.Encoding=Encoder; result=myClient.UploadString(Url,Data); if(CookieStr=="") { CookieStr=myClient.ResponseHeaders["Set-Cookie"].ToString(); CookieStr=GetCookie(CookieStr); } returnresult; } privatestringGetCookie(stringCookieStr) { stringresult=""; string[]myArray=CookieStr.Split(','); if(myArray.Count()>0) { result="Cookie:"; foreach(varstrinmyArray) { string[]CookieArray=str.Split(';'); result+=CookieArray[0].Trim(); result+=";"; } result=result.Substring(0,result.Length-2); } returnresult; } } }