C#模拟登录Twitter并发送私信

static void Main(string[] args)
        {
            GetCookie("UserName", "PassWord");
            Console.ReadLine();
        }

        public static void GetCookie(string UserName, string PassWord)
        {
            HttpWebRequest request = null;
            HttpWebResponse response = null;
            try
            {
                CookieContainer cookie = new CookieContainer();
                request = (HttpWebRequest)HttpWebRequest.Create("https://twitter.com/login/");
                request.Timeout = 180000;
                request.Method = "GET";
                request.Host = "twitter.com";
                request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0";
                //reqsessionGet.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36";
                request.AddRange(1024);
                request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                request.Headers["Accept-Language"] = "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3";
                request.CookieContainer = cookie;
                request.KeepAlive = true;

                response = (HttpWebResponse)request.GetResponse();
                StreamReader sr = new StreamReader(response.GetResponseStream());
                string content = sr.ReadToEnd();
                sr.Close();
                response.Close();
                //string Token = Regex.Match(content, @"<input type=""hidden"" value=""(\w+)"" name=""authenticity_token""/>").Groups[1].Value;
                //获取Token字符串
                HtmlDocument doc = new HtmlDocument();
                doc.LoadHtml(content);
                string XPath = "//input[@name=‘authenticity_token‘]";
                if (doc.DocumentNode.SelectNodes(XPath) != null)
                {
                    string Token = doc.DocumentNode.SelectSingleNode(XPath).Attributes["value"].Value;
                    Login(UserName, PassWord, Token, cookie);
                }
            }
            catch (Exception)
            {
                request.Abort();
                response.Close();
                Console.WriteLine("获取Token字符串失败,请检查网络连接");
            }
        }

        public static void Login(string UserName, string PassWord, string Token, CookieContainer cookie)
        {
            string PostStr = "session%5Busername_or_email%5D=" + UserName + "&session%5Bpassword%5D=" + PassWord + "&authenticity_token=" + Token + "&scribe_log=&redirect_after_login=&authenticity_token=" + Token;
            byte[] Data = Encoding.UTF8.GetBytes(PostStr);
            HttpWebRequest request = null;
            HttpWebResponse response = null;
            try
            {
                request = (HttpWebRequest)WebRequest.Create("https://twitter.com/sessions");
                request.Timeout = 180000;
                request.Method = "POST";
                request.Host = "twitter.com";
                request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36";
                //reqsession.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36";
                request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                request.Headers["Accept-Language"] = "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3";
                request.Referer = "https://twitter.com/";
                request.CookieContainer = cookie;
                request.KeepAlive = true;
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = Data.Length;
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(Data, 0, Data.Length);
                requestStream.Close();

                response = (HttpWebResponse)request.GetResponse();
                StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                string content = sr.ReadToEnd();
                sr.Close();
                response.Close();
                if (content.Contains("查看个人资料"))
                {
                    Console.WriteLine("Twitter登录成功");
                    SendMsg(Token, cookie);
                }
                else
                {
                    Console.WriteLine("Twitter登录失败");
                }
            }
            catch (Exception)
            {
                request.Abort();
                response.Close();
                Console.WriteLine("登录失败,请检查网络连接");
            }
        }

        public static void SendMsg(string Token, CookieContainer cookie)
        {
            Console.WriteLine("-----------发送私信-----------");
            Console.Write("请输入收件人:");
            string Receiver = Console.ReadLine();
            Console.Write("请输入发送内容:");
            string Msg = Console.ReadLine();

            string PostStr = "authenticity_token=" + Token + "&screen_name%5B%5D=" + Receiver + "&scribeContext%5Bcomponent%5D=tweet_box_dm&tagged_users=&text=" + Msg + "&tweetboxId=swift_tweetbox_1472018056979";
            HttpHelper http = new HttpHelper();
            string html = http.GetHtml("https://twitter.com/i/direct_messages/new", cookie, PostStr, true);
            Console.WriteLine(html);
            if (html.Contains("该用户没有关注你") || html.Contains("你只可以发送私信给关注你的人"))
            {
                Console.WriteLine("您输入的用户名不存在,或该用户没有关注你,你只可以发送私信给关注你的人");
            }
            else if (html.Contains(@"\u003e"))
            {
                Console.WriteLine("发送成功");
            }
        }

HttpHelper为HttpWebRequest封装类。

时间: 2024-10-04 20:42:27

C#模拟登录Twitter并发送私信的相关文章

C#实现模拟登录百度并发送私信

首先获取Token,根据Token获取PubliKey,使用RSA加密POST数据 private Regex _regex = new Regex(@"\{.*\}", RegexOptions.IgnoreCase); static void Main(string[] args) { new Program().Login("15953347093", "woainiwb74110"); Console.ReadLine(); } publ

HttpWebRequest 模拟登录响应点击事件(开源自己用的HttpHelper类)

平时也经常采集网站数据,也做模拟登录,但一般都是html控件POST到页面登录:还没有遇到用户服务器控件button按钮点击事件登录的,今天像往常一样POST传递参数,但怎么都能登录不了:最后发现还有两个参数需要传,__EVENTVALIDATION和__VIEWSTATE 在传的过程中需要对参数值进行URL编码 System.Web.HttpUtility.UrlEncode(value) 模拟登录代码:在本地写的一个测试的网站来模拟登录,原理都一样: Request request = ne

模拟登录新浪微博(接上篇)

模拟登录新浪微博 模拟登录新浪微博 1. 新浪微博登录机制 输入用户名密码 发送给服务器 服务器验证成功 返回Cookies与正常页面 2. 分析需要提交的数据 Mobile(用户名) Password(密码) remember(是否保持登录) backURL(登录以后返回的地址) backTitle(登录以后返回的标题) tryCount(尝试次数) vk(一个简单的验证码) submit(登录) action(URL参数) Requests提交数据的时候关键代码如下: 1.data={"mo

python模拟登录开源中国

我的个人博客( 肥龙的博客)发表了新文章了! 欢迎大家过来阅读,以下是文章的连接地址 http://www.comingcode.com/?p=371 继上一篇文章模拟登录百度空间(http://www.comingcode.com/?p=357)后,为了多点推广自己的博客,通过上网搜索资料和分析http数据包,我再次使用python模拟了开源中国的登录操作,能够发表博客同时也能发送动弹. 具体的实现过程也是和登录百度空间的差不多,都是需要去分析http发送的数据包内容. 通过这两篇文章的模拟登

C# 中使用System.Net.Http.HttpClient 模拟登录博客园 (GET/POST)

一. System.Net.Http.HttpClient简介 System.Net.Http 是微软.net4.5中推出的HTTP 应用程序的编程接口, 微软称之为“现代化的 HTTP 编程接口”, 主要提供如下内容: 1. 用户通过 HTTP 使用现代化的 Web Service 的客户端组件: 2. 能够同时在客户端与服务端同时使用的 HTTP 组件(比如处理 HTTP 标头和消息), 为客户端和服务端提供一致的编程模型. 个人看来是抄袭apache http client ,目前网上用的

Python爬虫实战(5):模拟登录淘宝并获取所有订单(1)

经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 本篇内容 1. python模拟登录淘宝网页 2. 获取登录用户的所有订单详情 3. 学会应对出现验证码的情况 4. 体会一下复杂的模拟登录机制 探索部分成果 1. 淘宝的密码用了AES加密算法,最终将密码转化为256位,在POST时,传输的是256位长度的密码. 2. 淘宝在登录时必须要输入验证码,在经过几次尝试失败后最终获取了验证码图片让用户手动输入来验证.

测试开发Python培训:模拟登录新浪微博-技术篇

测试开发Python培训:模拟登录新浪微博-技术篇 一般一个初学者项目的起点就是登陆功能的自动化,而面临的项目不同实现的技术难度是不一样的,poptest在做测试开发培训中更加关注技术难点,掌握技术实现思路,提高动手能力.这里通过大家都能接触到的系统新浪微博,作为案例. 模拟登录功能比较简单,很多人在学习自动化的时候都会以登陆来作为自己的第一个学习案例,有点像开发语言中第一段代码都是helloworld!一样.登陆简单的模拟登录,直接发post请求就OK,很容易实现. 这里用新浪微博,就是技术实

cURL模拟登录教学管理系统

最近在开发微信公众平台,想实现通过微信查询课表的功能.无奈本人业务不精,之前对微信公众平台不是很了解,甚至对PHP都不是很熟练.所以一直不知道怎么解决,在网上查阅了很多资料,收货不是很大,不过至少把原理弄懂了.其实原理很简单,就是利用php的cURL模拟登录技术. cURL是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 cURL 库.在PHP中建立cURL请求的基本步骤: 1.初始化 2.设置变量 3.执行并获取结果 4.

Python模拟登录cnblogs

Python利用requests.Session对象模拟浏览器登录cnblogs request.Session对行可以跨请求的保持cookie,非常方便的用于模拟登录. cnblogs登录页面分析: 登录页面https://passport.cnblogs.com/user/signin 使用抓包工具fiddler(wireshark无法抓取)可以抓取到登录时post的数据: 共三个字段,分别是input1.input2和remember(用户名.密码.是否记住登录信息). 其中,input1