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 模拟登录有验证码的网站 我们经常会碰到需要程序模拟登录一个网站,那如果网站需要填写验证码的要怎样模拟登录呢?这篇文章 ...
随机推荐
- java 中序列化(Serializable)
18年5月份,在毕业快一年的时候,我终于把自己从研发助理偏向行政打杂,偶尔写一些前端代码的处境,回归到了初衷-安安静静写前后端代码的小小程序员~过程中的心酸也就不在这里吐啦,毕竟我是小太阳,永不熄灭的 ...
- BZOJ 3894 Luogu P4313 文理分科 (最小割)
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3894 (luogu) https://www.luogu.org/pro ...
- New Barns
New Barns 时间限制: 1 Sec 内存限制: 128 MB 题目描述 Farmer John notices that his cows tend to get into argument ...
- ZOJ 1516 Uncle Tom's Inherited Land
题目大意: 除去那些作为荷塘的土地块,将剩余的土地希望每次将两块相邻的地一起卖出,最多能卖出多少种这样的由相邻土地 合成的长方形土地块 很明显的二分图问题,但是要考虑如何建模 一个长方形土地总是由相邻 ...
- uestc 1903
#include<stdio.h> int main() { int n,m,i,t; scanf("%d",&t); while(t--){ scanf(&q ...
- iphone学习
苹果开发者联盟的网址:http://www.apple.com.cn/developer/ objective-C on the Mac (Aoress) 作者:Dakrymple ...
- C. Painting Fence 分治
memory limit per test 512 megabytes input standard input output standard output Bizon the Champion i ...
- 洛谷 P1991 无线通讯网
P1991 无线通讯网 题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫 ...
- Waiting For Debugger
在eclipse中进行调试时常常出现以下这种提示:Application (app名称) is waiting for the debugger to attach 正常情况下.会非常快进入应用调 ...
- raywenderlich.com的Swift编程风格指南
翻译自:https://github.com/raywenderlich/swift-style-guide 这个风格指南可能和你从其它地方看到的不同,我们的焦点主要集中在互联网和文章上的可读性.创建 ...