/// <summary> /// 微博预登录 /// </summary> /// <param name="username">用户名</param> /// <returns></returns> public static PreLoginResponseData PreLogin(string username) { try { string userNameBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(HttpUtility.UrlEncode(username))); string url = "http://login.sina.com.cn/sso/prelogin.php"; PostHelper post = new PostHelper(url); post.Cookies = new CookieContainer(); post.PostItems = PreLoginData.Create(userNameBase64); string result = post.Post(); Regex re = new Regex("{.*}"); if (re.IsMatch(result)) { var data = re.Match(result).ToString(); var responseData = Newtonsoft.Json.JsonConvert.DeserializeObject <PreLoginResponseData>(data); if (responseData != null) { responseData.cookies = PostHelper.GetAllCookies(post.Cookies); return(responseData); } } } catch { } return(null); }
private dynamic PreparePostBodyForLogin(PreLoginData preLoginData) { var showPin = preLoginData.ServerData.showpin == "1"; if (showPin && string.IsNullOrEmpty(Pin)) { _preLoginDataState = preLoginData; throw new SinaPinNotFoundException(preLoginData.ServerData.pcid); } dynamic postObj = new ExpandoObject(); postObj.entry = "weibo"; postObj.gateway = 1; postObj.from = string.Empty; postObj.savestate = 7; postObj.useticket = 1; postObj.vsnf = 1; postObj.su = preLoginData.UserName; postObj.service = "miniblog"; postObj.servertime = preLoginData.ServerData.serverTime; postObj.nonce = preLoginData.ServerData.nonce; postObj.pwencode = "rsa2"; postObj.rsakv = preLoginData.ServerData.rsakv; postObj.sp = preLoginData.Password; postObj.sr = "1366*768"; postObj.prelt = 282; postObj.encoding = "UTF-8"; postObj.url = "http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack"; postObj.returntype = "META"; return(postObj); }
private async Task <PreLoginData> PreLoginAsync() { if (_preLoginDataState != null) { var preLogin = _preLoginDataState; _preLoginDataState = null; return(preLogin); } var userName = EncodeUserName(_userName); var preLoginJsonResult = await PreLoginAsync(userName); var preLoginData = JToken.Parse(preLoginJsonResult); dynamic serverData = new ExpandoObject(); serverData.serverTime = preLoginData["servertime"]?.ToString(); serverData.nonce = preLoginData["nonce"]?.ToString(); serverData.rsakv = preLoginData["rsakv"]?.ToString(); serverData.pubkey = "0" + preLoginData["pubkey"]?.ToString(); serverData.showpin = preLoginData["showpin"]?.ToString(); serverData.pcid = preLoginData["pcid"]?.ToString(); var data = new PreLoginData { UserName = userName, Password = EncodePassword(_password, serverData.serverTime, serverData.nonce, serverData.pubkey), ServerData = serverData }; return(data); }
public SinaWeiboLoginSimulator(string userName, string password, CookieContainer cookieContainer = null) { _userName = userName; _password = password; _cookieContainer = cookieContainer ?? new CookieContainer(); _webRequestEx = new WebRequestEx(_cookieContainer); _preLoginDataState = null; }
public async Task <string> RefreshPinImageAsync() { _preLoginDataState = await PreLoginAsync(); return(SinaWeiboUtility.GeneratePinImageUrl(_preLoginDataState.ServerData.pcid)); }