C#模拟登录人人网 人人网登录网页版

原文来自:http://www.cnblogs.com/fsjohnhuang/archive/2011/12/06/2278122.html(感谢博友的分享)

模拟登陆有一下几个步骤

第一 启用一个web访问会话方法或者实例化一个web访问类,如.net中的HttpWebRequest;
第二 模拟POST或者GET方式提交的数据;
第三 模拟请求的头;
第四 提交请求并获得响应,及对响应做我们所需要的处理。
这里我们以人人网的登录为例,将涉及到POST以及GET两种请求方式。

①抓包

用firefox的firebug、httpwatch都可以,这里用的是fiddler。登录人人网的时候用fiddler抓包,如下图:

找到红色箭头指向的那个POST包,后面还跟了两个GET包。

②模拟登录

POST登录:

public String getContent()
{
HttpWebRequest request = null;
HttpWebResponse response = null;
string gethost = string.Empty;
string content="";
CookieContainer cc = new CookieContainer(); //若要从远程调用中获取COOKIE一定要为request设定一个CookieContainer用来装载返回的cookies
string Cookiesstr = string.Empty;

try
{
//第一次POST请求
string UserName = "XXXXX";
string PassWord = "XXXXX";
string HostUrl = "http://guide.renren.com/guide";
string postdata = "email=" + UserName.Replace("@", "@") +"&password=" + PassWord +"&origURL=" + HostUrl +"&domain=renren.com";//模拟请求数据,数据样式可以用FireBug插件得到。人人网POST数据时,用户名邮箱中的“@”变为“@”,所以我们也要作此变化
//string LoginUrl = "http://www.renren.com/PLogin.do";//这个POST包没抓到过,估计是没有了,抓到的是下面这个
string LoginUrl = "http://www.renren.com/ajaxLogin";
request =(HttpWebRequest)WebRequest.Create(LoginUrl);//实例化web访问类
request.Method = "POST";//数据提交方式为POST
//模拟头
request.ContentType = "application/x-www-form-urlencoded";
byte[] postdatabytes = Encoding.UTF8.GetBytes(postdata);
request.ContentLength = postdatabytes.Length;
//request.Referer = "http://www.renren.com/Login.do?rf=r&domain=renren.com&origURL="+ HostUrl;
//下面是禁止自动跳转
request.AllowAutoRedirect = false;
request.CookieContainer = cc;
request.KeepAlive = true;
//提交请求
Stream stream;
stream = request.GetRequestStream();
stream.Write(postdatabytes, 0, postdatabytes.Length);
stream.Close();
//接收响应
response = (HttpWebResponse)request.GetResponse();
//保存返回cookie
response.Cookies =request.CookieContainer.GetCookies(request.RequestUri);
CookieCollection cook = response.Cookies;
string strcrook =request.CookieContainer.GetCookieHeader(request.RequestUri);
Cookiesstr = strcrook;
//取第一次GET跳转地址
StreamReader sr = new StreamReader(response.GetResponseStream(),Encoding.UTF8);
content = sr.ReadToEnd();
response.Close();
//string[] substr = content.Split(new char[] { '"' });
//gethost = substr[1];
}
catch (Exception)
{
MessageBox.Show("error");
}
return content;
}
模拟GET登录:

GET与POST请求大同小异,三次请求结束,保存好你的cookiestring,每次请求的时候都赋给请求的头部,你就处于登录状态了。

在上面的POST登录中获得的gethost和cookiesstr保存起来,用到下面的程序里就可以实现固定帐号的GET登录了。
try
{
request = (HttpWebRequest)WebRequest.Create(gethost);
request.Method = "GET";
request.KeepAlive = true;
request.Headers.Add("Cookie:" + Cookiesstr);
C#模拟登录人人网 人人网登录网页版
request.CookieContainer = cc;
request.AllowAutoRedirect = false;
response = (HttpWebResponse)request.GetResponse();
//设置cookie
Cookiesstr =request.CookieContainer.GetCookieHeader(request.RequestUri);
//取再次跳转链接
StreamReader sr = new StreamReader(response.GetResponseStream(),Encoding.UTF8);
string ss = sr.ReadToEnd();
MessageBox.Show("1GET" + ss);
string[] substr = ss.Split(new char[] { '"' });
gethost = substr[1];
request.Abort();
sr.Close();
response.Close();
}
catch (Exception)
{
//第一次GET出错
}

  

爱华网本文地址 » http://www.aihuau.com/a/25101013/160082.html

更多阅读

如何从Apache官网下载windows版apache服务器 apache服务器下载

如何从Apache官网下载windows版apache服务器——简介由于个人有强迫倾向,下载软件都喜欢从官网下载,摸索了好久终于摸清楚怎么从Apache官网下载windows安装版的Apache服务器了,现在分享给大家。如何从Apache官网下载windows版apache服

易信网页版登录与使用 易信网页版

易信网页版登录与使用——简介教你登录使用易信网页版,不需要安装客户端。易信网页版登录与使用——工具/原料电脑智能手机易信帐号易信网页版登录与使用——方法/步骤易信网页版登录与使用 1

QQ空间快速登录 网页版qq空间登录入口

QQ空间快速登录QQ空间快速登录——步骤/方法QQ空间快速登录 1、腾讯QQ空间登录,怎样快速登录QQ空间首页地址这个问题,如何QQ空间登录的3种方法,希望大家都可以快速的登录自己的QQ空间首页。QQ空间快速登录 2、qq空间登录方法1:打开QQ空

声明:《C#模拟登录人人网 人人网登录网页版》为网友奈何桥旁风满袖分享!如侵犯到您的合法权益请联系我们删除