在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例常用C#方法 → C# 模拟登陆百度 例子

C# 模拟登陆百度 例子

常用C#方法

下载此实例
  • 开发语言:C#
  • 实例大小:1.30M
  • 下载次数:58
  • 浏览次数:1089
  • 发布时间:2015-09-01
  • 实例类别:常用C#方法
  • 发 布 人:joe910101605
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 模拟登陆 模拟 登陆 百度

实例介绍

【实例简介】模拟登陆百度
【实例截图】模拟登陆百度

【核心代码】模拟登陆百度

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using Newtonsoft.Json;

namespace BaiduLoginDemo
{
    class Program
    {
        private Regex _regex = new Regex(@"\{.*\}", RegexOptions.IgnoreCase);
        static void Main(string[] args)
        {
           new Program().Login("用户名","密码");
        }

        public void Login(string username,string pwd)
        {
            var cookieContainer = new CookieContainer();
            var token = GetToken(cookieContainer);
            if (_regex.IsMatch(token))
                token = _regex.Match(token).Value;
            var resultToken = JsonConvert.DeserializeObject<ResultToken>(token);

            var pubKey = GetPubKey(resultToken.Data.Token, cookieContainer);
            if (_regex.IsMatch(pubKey))
                pubKey = _regex.Match(pubKey).Value;
            var publicKey = JsonConvert.DeserializeObject<PublicRsaKey>(pubKey);

            var rsakey = publicKey.Key;

            var pemToXml = RSAHelper.PemToXml(publicKey.Pubkey);
            var password = RSAHelper.RSAEncrypt(pemToXml, pwd);
            var url = "https://passport.baidu.com/v2/api/?login";
            var postdata = string.Format("staticpage=http%3A%2F%2Fapp.baidu.com%2Fsfile%2Fv3Jump.html&charset=UTF-8&token={0}&tpl=wise&subpro=&apiver=v3&tt={1}&codestring=&safeflg=0&u=%0D%0A%0D%0Ahttp%3A%2F%2Fapp.baidu.com%2Findex%3Fregdev%3D1&isPhone=false&quick_user=0&logintype=dialogLogin&logLoginType=pc_loginDialog&idc=&loginmerge=true&splogin=newuser&username={2}&password={3}&verifycode=&mem_pass=on&rsakey={4}&crypttype=12&ppui_logintime=426406&callback=parent.bd__pcbs__mwrr8d", resultToken.Data.Token, GetJsTimeSeconds(), HttpUtility.UrlEncode(username), HttpUtility.UrlEncode(password), HttpUtility.UrlEncode(rsakey));
            PostRequest(url, cookieContainer, postdata);
        }

        private string GetToken(CookieContainer cookieContainer)
        {
            var url = string.Format(@"https://passport.baidu.com/v2/api/?getapi&tpl=wise&apiver=v3&tt={0}&class=login&logintype=dialogLogin&callback=bd__cbs__v5pvt1", GetJsTimeSeconds());
            GetHtml(url, ref cookieContainer, "passport.baidu.com");
            return GetHtml(url, ref cookieContainer, "passport.baidu.com");
        }

        private string GetPubKey(string token, CookieContainer cookieContainer)
        {
            var url = string.Format("https://passport.baidu.com/v2/getpublickey?token={0}&tpl=wise&apiver=v3&tt={1}&callback=bd__cbs__fwnq4r", token, GetJsTimeSeconds());
            var html = GetHtml(url, ref cookieContainer, "passport.baidu.com");
            return html;
        }
        private static string GetJsTimeSeconds()
        {
            return (DateTime.UtcNow - DateTime.Parse("1970-01-01 0:0:0")).TotalMilliseconds.ToString("0");
        }
        private string GetHtml(string url, ref CookieContainer cookie, string host)
        {
            HttpWebRequest request = null;
            HttpWebResponse response = null;
            try
            {
                request = (HttpWebRequest)WebRequest.Create(url);
                request.Proxy = null;
                request.Credentials = CredentialCache.DefaultCredentials;
                request.Method = "GET";
                request.KeepAlive = true;
                request.Accept = "application/json, text/plain, */*";
                request.CookieContainer = cookie;
                request.AllowAutoRedirect = true;
                response = (HttpWebResponse)request.GetResponse();
                var sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                string ss = sr.ReadToEnd();
                sr.Close();
                request.Abort();
                response.Close();
                return ss;
            }
            catch (WebException ex)
            {
                return "";
            }
        }

        private void PostRequest(string url, CookieContainer cookieContainer, string postData)
        {
            HttpWebRequest request = null;
            HttpWebResponse response = null;
            try
            {
                request = (HttpWebRequest)WebRequest.Create(url);//实例化web访问类  
                request.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36";
                request.Credentials = CredentialCache.DefaultCredentials;
                request.Method = "POST"; //数据提交方式为POST  
                request.ContentType = "application/x-www-form-urlencoded";
                request.AllowAutoRedirect = false; // 不用需自动跳转
                request.Accept = "text/html,application/xhtml xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
                request.CookieContainer = cookieContainer;
                request.KeepAlive = true;
                //提交请求  
                byte[] postdatabytes = Encoding.UTF8.GetBytes(postData);
                request.ContentLength = postdatabytes.Length;
                Stream stream;
                stream = request.GetRequestStream();
                //设置POST 数据
                stream.Write(postdatabytes, 0, postdatabytes.Length);
                stream.Close();
                //接收响应  
                response = (HttpWebResponse)request.GetResponse();
                var cookieCollection = response.Cookies;//拿到bduss 说明登录成功
                //保存返回cookie  
                //取下一次GET跳转地址  
                StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                string content = sr.ReadToEnd();
                sr.Close();
            }
            catch (Exception ex)
            {

            }
            finally
            {
                if (request != null) request.Abort();
                if (response != null) response.Close();
            }
        }
    }

    public class PublicRsaKey
    {

        [JsonProperty("errno")]
        public string Errno { get; set; }

        [JsonProperty("msg")]
        public string Msg { get; set; }

        [JsonProperty("pubkey")]
        public string Pubkey { get; set; }

        [JsonProperty("key")]
        public string Key { get; set; }
    }

    public class ErrInfo
    {

        [JsonProperty("no")]
        public string No { get; set; }
    }

    public class Loginrecord
    {

        [JsonProperty("email")]
        public object[] Email { get; set; }

        [JsonProperty("phone")]
        public object[] Phone { get; set; }
    }

    public class Data
    {

        [JsonProperty("rememberedUserName")]
        public string RememberedUserName { get; set; }

        [JsonProperty("codeString")]
        public string CodeString { get; set; }

        [JsonProperty("token")]
        public string Token { get; set; }

        [JsonProperty("cookie")]
        public string Cookie { get; set; }

        [JsonProperty("usernametype")]
        public string Usernametype { get; set; }

        [JsonProperty("spLogin")]
        public string SpLogin { get; set; }

        [JsonProperty("disable")]
        public string Disable { get; set; }

        [JsonProperty("loginrecord")]
        public Loginrecord Loginrecord { get; set; }
    }



    public class ResultToken
    {

        [JsonProperty("errInfo")]
        public ErrInfo ErrInfo { get; set; }

        [JsonProperty("data")]
        public Data Data { get; set; }
    }
}

实例下载地址

C# 模拟登陆百度 例子

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警