国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#使用ImitateLogin模擬登錄百度

2019-10-29 21:34:40
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了C#使用ImitateLogin模擬登錄百度 的相關資料,需要的朋友可以參考下
 

在之前的文章中,我已經介紹過一個社交網站模擬登錄的類庫:imitate-login ,這是一個通過c#的HttpWebRequest來模擬網站登錄的庫,之前實現了微博網頁版和微博Wap版;現在,模擬百度登錄的部分也已經完成。由于個人時間的限制,加上目前有多個項目在同時進行,因此更新頻率會根據項目關注度來決定(Star & fork)。

這個類庫的使用方法非常簡單,僅對外提供一個方法:

LoginResult Login(1: string userName, 2: string password, 3: LoginSite loginSite); 

這個方法位于ImitateLogin的LoginHelper類中,使用之前需要先對其進行實例化。通過傳入 用戶名、密碼以及登錄的網站,返回一個包含登錄結果狀態、描述信息和Cookies字典的類。它通過 Thrift 來實現多語言的支持。

下面將通過介紹模擬百度登錄的實現來介紹如何進行擴充與二次開發:

首先,創建百度登錄類 BaiduLogin.cs 繼承 ILogin 接口;實現其生成的 DoLogin 方法。

#region ILogin implementationpublic LoginResult DoLogin(string UserName, string Password){  throw new NotImplementedException();}public CookieContainer cookies { set; get;}#endregion 

然后我們通過監聽百度登錄過程中的網絡請求,梳理出修改過Cookies和最終提交登錄所需的參數的請求。

Step1: 訪問以下鏈接生成初始Cookies:

HttpHelper.GetHttpContent("https://passport.baidu.com/passApi/html/_blank.html", cookies: cookies, cookiesDomain: "passport.baidu.com"); 

Step2: 獲取最終登錄提交所需的token:

//1. Get the token.string token_url = string.Format("https://passport.baidu.com/v2/api/?getapi&tpl=mn&apiver=v3&tt={0}&class=login&gid={1}&logintype=dialogLogin&callback=bd__cbs__{2}", TimeHelper.ConvertDateTimeInt(DateTime.Now), Guid.NewGuid().ToString().ToUpper(), build_callback());string prepareContent = HttpHelper.GetHttpContent(token_url, null, cookies, referer: "https://www.baidu.com/", encode: Encoding.GetEncoding("GB2312"), cookiesDomain: "passport.baidu.com");//string prepareJson = prepareContent.Split('(')[1].Split(')')[0];dynamic prepareJson = JsonConvert.DeserializeObject(prepareContent.Split('(')[1].Split(')')[0]);string token = prepareJson.data.token; 

其中 build_callback 為隨機生成6位字母或數字的組合的方法。

Step3: 獲取用于加密密碼的publickey:

//2. Get public keystring pubkey_url = "https://passport.baidu.com/v2/getpublickey?token={0}&tpl=mn&apiver=v3&tt={1}&gid={2}&callback=bd__cbs__{3}";string pubkeyContent = HttpHelper.GetHttpContent(string.Format(pubkey_url, token, TimeHelper.ConvertDateTimeInt(DateTime.Now), Guid.NewGuid().ToString().ToUpper(), build_callback()), null, cookies, referer: "https://www.baidu.com/", encode: Encoding.GetEncoding("GB2312"), cookiesDomain: "passport.baidu.com");dynamic pubkeyJson = JsonConvert.DeserializeObject(pubkeyContent.Split('(')[1].Split(')')[0]);rsa_pub_baidu = pubkeyJson.pubkey;string KEY = pubkeyJson.key; 

stopwatch 是一個記錄從最初執行到最終提交之前的耗時的一個計時器,get_pwa_rsa 為加密密碼的方法。

Step4: 模擬執行最終的登錄:

//3. Build post datastring login_data = "staticpage=https%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fv3Jump.html&charset=UTF-8&token={0}&tpl=mn&subpro=&apiver=v3&tt={1}&codestring=&safeflg=0&u=https%3A%2F%2Fwww.baidu.com%2F&isPhone=&detect=1&gid={2}&quick_user=0&logintype=dialogLogin&logLoginType=pc_loginDialog&idc=&loginmerge=true&splogin=rate&username={3}&password={4}&verifycode=&mem_pass=on&rsakey={5}&crypttype=12&ppui_logintime={6}&countrycode=&callback=parent.bd__pcbs__{7}";login_data = string.Format(login_data, token, TimeHelper.ConvertDateTimeInt(DateTime.Now), Guid.NewGuid().ToString().ToUpper(), HttpUtility.UrlEncode(UserName), HttpUtility.UrlEncode(get_pwa_rsa(Password)), HttpUtility.UrlEncode(KEY), stopwatch.ElapsedMilliseconds, build_callback());//4. Post the login datastring login_url = "https://passport.baidu.com/v2/api/?login";HttpHelper.GetHttpContent(login_url, login_data, cookies, referer: "https://www.baidu.com/", cookiesDomain: "passport.baidu.com"); 

Step5:驗證最終的登錄結果:

string home_url = "https://www.baidu.com";string result = HttpHelper.GetHttpContent(home_url, cookies: cookies, cookiesDomain: "passport.baidu.com");//5. Verifty the login resultif (string.IsNullOrWhiteSpace(result) || result.Contains("賬號存在異常") || !result.Contains("bds.comm.user=/"")){  return new LoginResult() { Result = ResultType.AccounntLimit, Msg = "Fail, Msg: Login fail! Maybe you account is disable or captcha is needed." };}

Step6:創建返回結果類:

LoginResult loginResult = new LoginResult() { Result = ResultType.Success, Msg = "Success", Cookies = HttpHelper.GetAllCookies(cookies) }; 

至此,模擬登錄部分的代碼就完成了,為了能夠被其它程序調用,你還需要在 LoginSite 的枚舉中新增一條來標識這個登錄方法,此處增加了一個 Baidu = 5,并設置 [Description(“Baidu”)]。

然后在 LoginHelper.cs 的 Login 方法中的 switch (loginSite) 里增加一個 case:

case LoginSite.Baidu:  LoginClass = new BaiduLogin ();  break;

以上內容是腳本之家小編給大家介紹的C#使用ImitateLogin模擬登錄百度的全部敘述,希望大家喜歡。



注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗江县| 尉犁县| 武义县| 江阴市| 娱乐| 吉木萨尔县| 沙洋县| 福建省| 奉贤区| 江达县| 芒康县| 乳源| 仪陇县| 门源| 常山县| 三亚市| 湟源县| 永寿县| 万荣县| 华容县| 萨迦县| 安化县| 怀柔区| 涪陵区| 万山特区| 英山县| 洛南县| 历史| 仁寿县| 乌拉特前旗| 莱西市| 新乐市| 繁昌县| 当阳市| 敖汉旗| 阳曲县| 绵阳市| 天门市| 望江县| 上林县| 德州市|