美文网首页
c#推特登录发推评论

c#推特登录发推评论

作者: 努曼曼 | 来源:发表于2018-09-24 20:52 被阅读0次

    第一次写博客


    用c#做了一个有关推特的模拟登录,评论等内容。

    开始用c#写时,对c#也就是写过学校的数据库实验课设。然后搜到了有人写过关于c#模拟登录twitter的,就去学习了下,用一段时间弄懂用c#去登录的基本思路,然后自己接着才又做了发推,评论,盖楼,改头像,改密码。非常感谢那位 博主 写的模拟登陆的代码给了我学习的地方!

    首先推特登录没有验证码,这也是省去很多麻烦,通过抓包尝试看看登录所需信息

    URL:https://twiitter.com/sessions


    用户名密码我随便填的,除此之外,还有个token,ui_metrics两个数据需要提交的。这些可以用c#做爬虫实时爬下来然后放入登录请求中,思路也不是很难,就当初对C#爬虫这块不太了解,又去学习了一小会,反正它也没验证码,经过测试最后也是可以成功模拟登录成功了。

    public CookieContainer GetCookie( string UserAgent,ref string Token)

            {

                HttpWebRequest request = null;

                HttpWebResponse response = null;

                CookieContainer cookie = null;

                try

                {

                    cookie = new CookieContainer();

                    request = (HttpWebRequest)HttpWebRequest.Create("https://twitter.com/login/")

                    request.Timeout = 18000;

                    request.Method = "GET";

                    request.Host = "twitter.com";

                    request.UserAgent = UserAgent;

                    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();

                    //获取Token字符串

                    Token = Regex.Match(content, @"<input type=""hidden"" value=""(\w+)"" name=""authenticity_token""/>").Groups[1].Value;

                    return cookie;

                }

                catch (Exception)

                {

                    request.Abort();

                    return cookie;

                }

            }

    下面是模拟登录的函数,在登录前我访问了https://twiitter.com/login  爬取到token,ui_metrics还有cookie。因为有些帐号登录时需要验证邮箱,后来我又加了个自动判断验证邮箱。验证邮箱需要的参数抓包可以知道的,那些参数也用爬虫正则匹配爬下来就好了,chanllengeId ,userid,token这些都是验证邮箱需要的参数。

    public CookieContainer Login(string UserName, string PassWord,string Token, CookieContainer cookie, string UserAgent,string ui_metrics,ref string station,ref string chanllengeId,ref string userid)

            {

             String PostStr = "session%5Busername_or_email%5D=" + UserName + "&session%5Bpassword%5D=" + PassWord + "&return_to_ssl=truee&scribe_log=&redirect_after_login=%2F%3Flogged_out%3D1%26lang%3Den&authenticity_token=" + Token + "&ui_metrics=" + ui_metrics ;

                byte[] Data = Encoding.UTF8.GetBytes(PostStr);

                HttpWebRequest request = null;

                HttpWebResponse response = null;

                try

                {

                    request = (HttpWebRequest)WebRequest.Create("https://twitter.com/sessions")

                    request.Timeout = 18000;

                    request.Method = "POST";

                    request.Host = "twitter.com";

                    request.UserAgent = UserAgent;

                    request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*;q=0.8";

                    request.Headers["Accept-Language"] = "zh-CN,zh;q=0.9";

                    request.Referer = "https://twitter.com/?logged_out=1&lang=en";

                    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("If you’re not redirected soon"))

                    {

                        station = UserName + "登录成功\n";

                    }

                    else

                    {

                        if (content.Contains("1eqd"))

                        {

                            station = "填写邮箱中...\n";

                            chanllengeId = Regex.Match(content, @"challenge_id=(\w+)&").Groups[1].Value;

                            userid = Regex.Match(content, @"user_id=(\w+)&").Groups[1].Value;

                            return null;

                        }

                        station = UserName + "登录失败\n";

                    }

                    return cookie;

                }

                catch (Exception)

                {

                    station = UserName + "访问失败\n";

                    request.Abort();

                    return cookie;

                }

            }

    这里就返回了登录的cookie,然后可以用它发推,评论,改头像,改名字,改密码,这些通过抓包也不是很难,参照上面代码,抓一下包,post内容换一下差不多都可以了。主要点赞遇到了麻烦,没有做出来,等我有空再研究研究点赞什么情况。

    过程中遇到的问题:登录评论时证书之类的出错问题,复制出错提示百度一下,解决了;登录,评论有时post请求与之前不一样,需要重新抓包查看修改post请求内容;带图发推,评论,图片上传的问题,自己也是通过抓包分析,构造请求流,也花了3天左右才成功发有图片内容的推文与评论。主要是图片的请求的顺序,请求内容\n\t一个都不能少,这个卡了我好长时间,这些百度也都有先例,参照了其他人

    总结:推特没有微博的验证码,这个是比较好的。最后来看代码不是很难,得多抓包多上网查阅相关资料多尝试,C#语言也多了解了一丢丢,语言只是一种工具,最重要的是对爬虫,模拟登录有了一定的思路。

    先写到这吧

    相关文章

      网友评论

          本文标题:c#推特登录发推评论

          本文链接:https://www.haomeiwen.com/subject/osshoftx.html