序言:

回归正题:前面讲到的抓包分析的数据,是模拟登录要获得得必要信息(当然有些也不是必要的...我只是都列举出来这样有个对比)如果说,有哪个英文字母不知道什么意思的,可以问一下度娘,有不少前辈都发过类似的博文上面都有解释,我这软件也是基于他们的帮助才得以实现。

好了,根据前面说的步骤,下面开始我们今天的内容--------①如何获取百度的BAIDUID

获取之前还要给大家普及一个注意事项:就是Get请求跟Post时的请求报文头,Post必须注明request.ContentType = "application/x-www-form-urlencoded";

第一步理论逻辑:我们要向www.baidu.com提交一个Get请求,获取这个BAIDUID(第一次请求的时候才能够抓包到这个Cookies,所以找不到的童鞋请清除缓存)

第二步代码实现:

#region 网页请求HttpHelper类
       HttpWebRequest request = null;
        HttpWebResponse response = null;
        CookieContainer cc = new CookieContainer();
        /// <summary>
        /// Get方式获取页面响应内容
        /// </summary>
        public string GetPageResponse_Get(string url,string referer,string request_Accept)
        {
            try
            {
                string content = "";
                request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "GET";
                request.Referer = referer;
                request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0";
                request.Headers["Accept-Language"] = "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3";
                request.KeepAlive = true;
                request.Accept = request_Accept;
                request.Host = new Uri(url).Host;
                request.AllowAutoRedirect = false;
                request.CookieContainer = cc;
                using (response = (HttpWebResponse)request.GetResponse())
                {  
                    //第一次从http:\\www.baidu.com中获取BAIDUID时,发现该cookie会当场失效,此处修改保存期限
                    foreach (Cookie ck in response.Cookies)
                    {
                        ck.Expires = DateTime.MaxValue;
                    }
                    cc.Add(response.Cookies);
                    Stream stream = response.GetResponseStream();
                    StreamReader reader = new StreamReader(stream);
                    content = reader.ReadToEnd(); 
                    stream.Close();
                    reader.Close();
                }
                return content;
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
            return null;
        }
        /// <summary>
        /// Post数据获取响应
        /// </summary>
        public string GetPageResponse_Post(string url, string postData, string referer)
        {
            try
            {
                string content = "";
                request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "Post";
                request.Timeout = 20000;
                request.Headers["Cache-control"] = "no-cache";
                request.Headers["Accept-Language"] = "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3";
                request.Headers["DNT"] = "1";
                request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0";
                request.Referer = referer;
                request.ContentType = "application/x-www-form-urlencoded";
                request.KeepAlive = true;
                request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                request.Host = new Uri(url).Host;
                request.AllowAutoRedirect = false;
                request.CookieContainer = cc;
                ///携带cookiesPost数据
                byte[] dataByte = Encoding.UTF8.GetBytes(postData);
                request.ContentLength = dataByte.Length;
                using (Stream stream = request.GetRequestStream())
                {
                    stream.Write(dataByte, 0, dataByte.Length);
                }
                using (response = request.GetResponse() as HttpWebResponse)
                {
                    foreach (Cookie ck in response.Cookies)
                    {
                        ck.Expires = DateTime.MaxValue;
                    }
                    cc.Add(response.Cookies);
                    using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
                    {
                        content = reader.ReadToEnd();
                    }   
                }
                return content;
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
            return null;
        }

#endregion

上面的类大家参考一下,写的可能不是很好,大家要注意一个问题就是,目前我用的是VS2012版本,它在获取BAIDUID的时候我发现这个值效期短,所以弄得每次反馈回来的信息都没有这个值,捣鼓了很久才终于发现原来是Cookis过期。所以上面的代码,我将每一次获得的Cookies都设置成为无限期。

下面是获取代码:

/// <summary>
        /// 获取BAIDUID等cookies
        /// </summary>
        public void GetBAIDUID()
        {
            string url_baidu = string.Format("https://www.baidu.com");
            helper.GetPageResponse_Get(url_baidu,null, "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        }

如无意外,你获得的将会有4个Cookies,也就是前面提到的那几个,但最重要的是BAIDUID,我们只要将这些Cookies储存在CookieContainer中就可以不用管了,好了,今天就到这里比较简单,如果看了有不懂的或者无法实现的,欢迎评论交流

C#模拟百度登录并到指定网站评论回帖(二)的更多相关文章

  1. C#模拟百度登录并到指定网站评论回帖(五)

    前面的四篇已经说完了全部的模拟百度登录,接下来就是到指定的网站去发表评论,当然你也可能是获取其他信息,其实这些套路都是万变不离其宗的,弄懂之后觉得像这种请求-响应获取信息的功能实在很简单(想起当初走的 ...

  2. C#模拟百度登录并到指定网站评论回帖(一)

    核心信息: 请求网址:  https://passport.baidu.com/v2/api/?login请求方法:  POST状态码:  HTTP/1.1 200 OK请求头  //用户代理 Use ...

  3. C#模拟百度登录并到指定网站评论回帖(三)

    上次说到怎么获取BAIDUID,这个相信很多人都能够拿到就不多说了,今天一连说两个,获取token和raskey 2.利用以上获得的cookie直接访问页面 https://passport.baid ...

  4. C#模拟百度登录并到指定网站评论回帖(四)

    基本的实现功能前面已经全部讲完,基本上可以复制黏贴完成登录百度的过程了 今天的这一贴就说说怎么获取百度的验证码 内容回顾:还记得前面第一贴说的如果登录发生异常,百度会发回2个值吗?是的,就是codeT ...

  5. POST模拟百度登录和自动发帖

    这里用HttpClient发包模拟百度登录和发帖,验证码部分采用机器下载人工识别. 登陆百度的原理:1. 访问https://passport.baidu.com/v2/api/?getapi& ...

  6. C#模拟百度登录

    目录: 1.fiddler解析百度登录地址 2.处理传入参数 1.fiddler解析百度登录地址 因工作需要,所以研究了下百度的登陆.首先打开https://passport.baidu.com/v2 ...

  7. go 语言模拟百度登录

    1.参考网上Python的例子自己写了一个go语言的.这个仅供学习技术参考,为了方便有部分参数直接phantomjs执行js获取,代码基本都有注释,测试打印没有删除,还请见谅! 2.本文参考http: ...

  8. 通过winform+模拟登录实现快速一键登录到人才招聘网站

    之前为了便于人事部门招聘登录网站更简洁高效,免去每天频繁输网址.用户名.密码等相关登录信息,特基于winform+HttpWebRequest实现模拟请求登录,最终达到一键登录到招聘网站后台的效果. ...

  9. C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站

    原文:C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站 我们经常会碰到需要程序模拟登录一个网站,那如果网站需要填写验证码的要怎样模拟登录呢?这篇文章 ...

随机推荐

  1. 【Codeforces 598D】Igor In the Museum

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 同一个联通块里面答案都一样. 把每个联通块的答案都算出来 然后赋值就好 [代码] #include <bits/stdc++.h> ...

  2. 【Codeforces 484A】Bits

    [链接] 我是链接,点我呀:) [题意] 让你求出l~r当中二进制表示1的个数最多的数x [题解] 最多有64位 我们可以从l开始一直增大到r 怎么增大? 找到l的二进制表示当中0所在的位置 假设i这 ...

  3. POJ 1811 大整数素数判断 Miller_Rabin

    #include <cstdio> #include <cstring> #include <cmath> #include <ctime> #incl ...

  4. uestc 1904

    #include<stdio.h> #define N  1010 int min[N]; int main() { int t,n,p,ti,first,end,num,i,j,max, ...

  5. ssh整合配置文件------web.xml配置

    <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://w ...

  6. MyBatis3-实现单表数据的增删查改

    继续前一篇文章http://www.cnblogs.com/EasonJim/p/7050710.html所示的例子,返回的是单个实体,而接下来将进行列表的返回等操作: 一.查询列表 查询出列表,也就 ...

  7. 《WF in 24 Hours》读书笔记 - Hour 3(1) - Workflow:添加宿主和事件监听

    1. 创建项目组,并添加一个Console Project和Activity Library,在Activity Library的项目中添加CodeActivity1和CodeActivity2,最终 ...

  8. The return type is incompatible with JspSourceDependent.getDependants():JasperException问题分析与解决方法

    Linux下基于JSP的报表集成到项目中后,显示不出来,查看tomcat的日志.有例如以下报错信息: The return type is incompatible with JspSourceDep ...

  9. DetachedCriteria的使用

    设计上能够灵活的依据 Criteria 的特点来方便地进行查询条件的组装.如今对 Hibernate的Criteria 的使用方法进行总结:    Hibernate 设计了 CriteriaSpec ...

  10. Android开发:Eclipse中SqliteManager插件使用

    通常开发Android的时候要使用到数据库操作,会遇到下面小问题: 数据库文件在哪?怎样訪问或操作? 能够通过:打开DDMS->File Explorer看到的sqlite数据库在eclipse ...