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中就可以不用管了,好了,今天就到这里比较简单,如果看了有不懂的或者无法实现的,欢迎评论交流
最新文章
- Running Dubbo On Spring Boot
- [原] MSSQL MDF文件太大问题
- Mac OS Storm+Kafka+Zookeeper配置
- Codeforces Round #252 (Div. 2) A - Valera and Antique Items
- Thinking in Java——笔记(6)
- nodejs gearman redis
- XposedNoRebootModuleSample 不需要频繁重启调试的Xposed 模块源码例子
- Java之ByteArrayInputStream和ByteArrayOutputStream-操作字节数组的类
- asmdisk 丢失问题一次记录
- iOS语音识别,语音播报,文字变语音播报,语音变文字
- [React] React Router: IndexRoute
- 使用apidoc根据JS文件生成接口文档
- c# linq的差集,并集,交集,去重【转】
- sphinx的再创造coreseek的安装过程
- centos7 安装mysql5.7
- mpvue学习笔记(一) 基础介绍
- java(二)Web部分
- 2018-2019-2 20175310 实验二《Java面向对象程序设计》实验报告
- MapReduce编程:平均成绩
- Ubuntu 16.04 Server 设置静态IP
热门文章
- idea中找不到maven projects的集中解决办法
- Windows 硬件开发人员怎样选择代码签名证书类型
- ssh登录问题
- 算(tyvjP4700)
- Mutual Training for Wannafly Union #6
- [JavaEE] Data Validation
- BEGINNING SHAREPOINT&;#174; 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers
- 推荐美丽的flash网页MP3音乐播放器
- 表格属就用treegrid
- unity3d-23种设计模式全解析