C#模拟百度登录并到指定网站评论回帖(二)
序言:
回归正题:前面讲到的抓包分析的数据,是模拟登录要获得得必要信息(当然有些也不是必要的...我只是都列举出来这样有个对比)如果说,有哪个英文字母不知道什么意思的,可以问一下度娘,有不少前辈都发过类似的博文上面都有解释,我这软件也是基于他们的帮助才得以实现。
好了,根据前面说的步骤,下面开始我们今天的内容--------①如何获取百度的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#模拟百度登录并到指定网站评论回帖(二)的更多相关文章
- C#模拟百度登录并到指定网站评论回帖(五)
前面的四篇已经说完了全部的模拟百度登录,接下来就是到指定的网站去发表评论,当然你也可能是获取其他信息,其实这些套路都是万变不离其宗的,弄懂之后觉得像这种请求-响应获取信息的功能实在很简单(想起当初走的 ...
- C#模拟百度登录并到指定网站评论回帖(一)
核心信息: 请求网址: https://passport.baidu.com/v2/api/?login请求方法: POST状态码: HTTP/1.1 200 OK请求头 //用户代理 Use ...
- C#模拟百度登录并到指定网站评论回帖(三)
上次说到怎么获取BAIDUID,这个相信很多人都能够拿到就不多说了,今天一连说两个,获取token和raskey 2.利用以上获得的cookie直接访问页面 https://passport.baid ...
- C#模拟百度登录并到指定网站评论回帖(四)
基本的实现功能前面已经全部讲完,基本上可以复制黏贴完成登录百度的过程了 今天的这一贴就说说怎么获取百度的验证码 内容回顾:还记得前面第一贴说的如果登录发生异常,百度会发回2个值吗?是的,就是codeT ...
- POST模拟百度登录和自动发帖
这里用HttpClient发包模拟百度登录和发帖,验证码部分采用机器下载人工识别. 登陆百度的原理:1. 访问https://passport.baidu.com/v2/api/?getapi& ...
- C#模拟百度登录
目录: 1.fiddler解析百度登录地址 2.处理传入参数 1.fiddler解析百度登录地址 因工作需要,所以研究了下百度的登陆.首先打开https://passport.baidu.com/v2 ...
- go 语言模拟百度登录
1.参考网上Python的例子自己写了一个go语言的.这个仅供学习技术参考,为了方便有部分参数直接phantomjs执行js获取,代码基本都有注释,测试打印没有删除,还请见谅! 2.本文参考http: ...
- 通过winform+模拟登录实现快速一键登录到人才招聘网站
之前为了便于人事部门招聘登录网站更简洁高效,免去每天频繁输网址.用户名.密码等相关登录信息,特基于winform+HttpWebRequest实现模拟请求登录,最终达到一键登录到招聘网站后台的效果. ...
- C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站
原文:C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站 我们经常会碰到需要程序模拟登录一个网站,那如果网站需要填写验证码的要怎样模拟登录呢?这篇文章 ...
随机推荐
- 关于构造函数及参数执行顺序说明(c#)
原文:https://blog.csdn.net/junmail/article/details/83249186 构造函数的执行顺序: 子类静态变量>子类静态构造函数>子类非静态变量&g ...
- 【01】bootstrap基本信息
[01]基本信息 中文官网:http://www.bootcss.com/ 英文官网:https://github.com/twbs/bootstrap/ 支持IE8+ CND : htt ...
- Spring MVC学习总结(8)——Swagger入门详解
前言 Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件.本文简单介绍了在项目中集成swagger的方法和一些常见问题.如果想深入分析项目源码,了解更多内容,见参考资料. S ...
- HDU 1542 Atlantics 线段树+离散化扫描
将 x 轴上的点进行离散化,扫描线沿着 y 轴向上扫描 每次添加一条边不断找到当前状态有效边的长度 , 根据这个长度和下一条边形成的高度差得到一块合法的矩形的面积 #include<iostre ...
- hdu 1269 求连通图的模板题
#include<stdio.h> #include<string.h> #include<iostream>//只存在一个连通分量 #include<str ...
- [Vue @Component] Define Props on a Vue Class with vue-property-decorator
While traditional Vue components require a data function which returns an object and a method object ...
- oracle11g dataguard failover重建后归档日志没有被应用被NO的问题
1.主库从库归档记录不一致.例如以下所看到的: 做完failover后,坏的旧主库变成了新的从库,可是新从库的归档日志记录不一致,就是archive log list;出来的和v$archived_l ...
- android_handler(一)
仅仅是一个简单的handler的样例,目的就是对handler有一个初步的接触. 在layout上加入一个button,点击按钮,然后打印出利用handler传送的数据.(都是执行在mainthrea ...
- Android Studio怎样改动快捷键
在Android Studio中.如果你认为某个快捷键太复杂,要想改动.怎么改动呢,首先要找到这个快捷键,可是Android Studio搜索快捷键有一个bug,就是你不能依据快捷键来搜索相应的功能点 ...
- 高效开发之SASS篇 灵异留白事件——图片下方无故留白 你会用::before、::after吗 link 与 @import之对比 学习前端前必知的——HTTP协议详解 深入了解——CSS3新增属性 菜鸟进阶——grunt $(#form :input)与$(#form input)的区别
高效开发之SASS篇 作为通往前端大神之路的普通的一只学鸟,最近接触了一样稍微高逼格一点的神器,特与大家分享~ 他是谁? 作为前端开发人员,你肯定对css很熟悉,但是你知道css可以自定义吗?大家 ...