Hi,大家好。
我有一个模拟登录方面问题,三天了都没解决,请教下各位牛牛。问题是这样:登录http://www.howardforums.com,然后
我想访问http://www.howardforums.com/private.php?do=newpm&u=101,抓取u=101的用户名,但是报告我未登录。记住身份信息啥的我都做了的,而且前面另一个论坛也成功了,后来发现问题可能是该论坛有隐藏域<input type="hidden" name="securitytoken" value="guest" />这个该怎么办呢?
登录以及对一个用户发信息我都成功了的,因为抓包后可以按格式填写隐藏域信息。
谢谢了~
//
CookieContainer myCookieContainer = new CookieContainer();
string postData = "vb_login_username=0107&vb_login_password=&vb_login_password_hint=890107&s=&securitytoken=guest&do=login&vb_login_md5password=a348a7b37a88e369faa6573b29fd01bb&vb_login_md5password_utf=a348a7b37a88e369faa6573b29fd01bb";
sting postUrl = "http://www.howardforums.com/forum.php";
string usrUrl = "http://www.howardforums.com/private.php?do=newpm&u=101"; //登录
LoginResult PostLoginInfo()
{
LoginResult result = LoginResult.LoginError;
try
{
// Create a HttpRequest
byte[] data = encoding.GetBytes(postData);
HttpWebRequest request = WebRequest.Create(postUrl) as HttpWebRequest;
request.Method = "POST";
request.AllowAutoRedirect = true;
request.ServicePoint.Expect100Continue = false;
request.Timeout = 300000;
request.Accept = "*/*";
request.Referer = referer;
request.Headers.Add("Accept-Language", "zh-cn,en-US;q=0.5");
request.ContentType = "application/x-www-form-urlencoded";
request.Headers.Add("UA-CPU", "x86");
request.Headers.Add("Accept-Encoding", "gzip, deflate");
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; QQDownload 1.7; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
request.KeepAlive = true;
request.ContentLength = data.Length; // 要Post的数据的长度
request.Headers.Add("Pragma", "no-cache");
request.CookieContainer = myCookieContainer; // 把要Post的Data写入(追加)到outStream对象中,使其具有post data
Stream outStream = request.GetRequestStream();
outStream.Write(data, 0, data.Length);
outStream.Close(); // Get Http Response
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
response.Cookies = myCookieContainer.GetCookies(request.RequestUri);
//cookie 1 if (response.StatusCode == HttpStatusCode.OK)
{
Stream respStream = response.GetResponseStream();
if (response.ContentEncoding.ToLower().Contains("gzip"))
{
respStream = new GZipStream(respStream, CompressionMode.Decompress);
}
else if (response.ContentEncoding.ToLower().Contains("deflate"))
{
respStream = new DeflateStream(respStream, CompressionMode.Decompress);
} StreamReader reader = new StreamReader(respStream, encoding);
string htmlText = reader.ReadToEnd();
reader.Close();
respStream.Close(); result = CheckLogin(htmlText);
}
}
catch (Exception exc)
{
SetMessage(exc.Message + "\r\n");
} return result;
} //访问另一个页面
public string GetUserPage(string usrUrl)
{
string htmlText = "";
try
{
// Create a HttpRequest
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(usrUrl);
request.Timeout = 300000;
request.AllowAutoRedirect = true;
//
request.Method = "POST";
request.Accept = "*/*";
request.Referer = referer;
request.Headers.Add(HttpRequestHeader.AcceptLanguage, "zh-cn,en-US;q=0.5");
request.ContentType = "application/x-www-form-urlencoded";
request.Headers.Add("UA-CPU", "x86");
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
//request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; QQDownload 1.7; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.3; .NET4.0E; .NET4.0C; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
request.KeepAlive = true;
request.Headers.Add(HttpRequestHeader.Pragma, "no-cache");
request.CookieContainer = myCookieContainer; // Get Http Response
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
response.Cookies = myCookieContainer.GetCookies(request.RequestUri); if (response.StatusCode == HttpStatusCode.OK)
{
Stream respStream = response.GetResponseStream(); if (response.ContentEncoding.ToLower().Contains("gzip"))
{
respStream = new GZipStream(respStream, CompressionMode.Decompress);
}
else if (response.ContentEncoding.ToLower().Contains("deflate"))
{
respStream = new DeflateStream(respStream, CompressionMode.Decompress);
} StreamReader reader = new StreamReader(respStream, encoding);
htmlText = reader.ReadToEnd();
reader.Close();
}
else
{
htmlText = "";
}
}
catch (Exception exc)
{
string error = exc.Message;
htmlText = "";
} return htmlText;
}
我有一个模拟登录方面问题,三天了都没解决,请教下各位牛牛。问题是这样:登录http://www.howardforums.com,然后
我想访问http://www.howardforums.com/private.php?do=newpm&u=101,抓取u=101的用户名,但是报告我未登录。记住身份信息啥的我都做了的,而且前面另一个论坛也成功了,后来发现问题可能是该论坛有隐藏域<input type="hidden" name="securitytoken" value="guest" />这个该怎么办呢?
登录以及对一个用户发信息我都成功了的,因为抓包后可以按格式填写隐藏域信息。
谢谢了~
//
CookieContainer myCookieContainer = new CookieContainer();
string postData = "vb_login_username=0107&vb_login_password=&vb_login_password_hint=890107&s=&securitytoken=guest&do=login&vb_login_md5password=a348a7b37a88e369faa6573b29fd01bb&vb_login_md5password_utf=a348a7b37a88e369faa6573b29fd01bb";
sting postUrl = "http://www.howardforums.com/forum.php";
string usrUrl = "http://www.howardforums.com/private.php?do=newpm&u=101"; //登录
LoginResult PostLoginInfo()
{
LoginResult result = LoginResult.LoginError;
try
{
// Create a HttpRequest
byte[] data = encoding.GetBytes(postData);
HttpWebRequest request = WebRequest.Create(postUrl) as HttpWebRequest;
request.Method = "POST";
request.AllowAutoRedirect = true;
request.ServicePoint.Expect100Continue = false;
request.Timeout = 300000;
request.Accept = "*/*";
request.Referer = referer;
request.Headers.Add("Accept-Language", "zh-cn,en-US;q=0.5");
request.ContentType = "application/x-www-form-urlencoded";
request.Headers.Add("UA-CPU", "x86");
request.Headers.Add("Accept-Encoding", "gzip, deflate");
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; QQDownload 1.7; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
request.KeepAlive = true;
request.ContentLength = data.Length; // 要Post的数据的长度
request.Headers.Add("Pragma", "no-cache");
request.CookieContainer = myCookieContainer; // 把要Post的Data写入(追加)到outStream对象中,使其具有post data
Stream outStream = request.GetRequestStream();
outStream.Write(data, 0, data.Length);
outStream.Close(); // Get Http Response
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
response.Cookies = myCookieContainer.GetCookies(request.RequestUri);
//cookie 1 if (response.StatusCode == HttpStatusCode.OK)
{
Stream respStream = response.GetResponseStream();
if (response.ContentEncoding.ToLower().Contains("gzip"))
{
respStream = new GZipStream(respStream, CompressionMode.Decompress);
}
else if (response.ContentEncoding.ToLower().Contains("deflate"))
{
respStream = new DeflateStream(respStream, CompressionMode.Decompress);
} StreamReader reader = new StreamReader(respStream, encoding);
string htmlText = reader.ReadToEnd();
reader.Close();
respStream.Close(); result = CheckLogin(htmlText);
}
}
catch (Exception exc)
{
SetMessage(exc.Message + "\r\n");
} return result;
} //访问另一个页面
public string GetUserPage(string usrUrl)
{
string htmlText = "";
try
{
// Create a HttpRequest
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(usrUrl);
request.Timeout = 300000;
request.AllowAutoRedirect = true;
//
request.Method = "POST";
request.Accept = "*/*";
request.Referer = referer;
request.Headers.Add(HttpRequestHeader.AcceptLanguage, "zh-cn,en-US;q=0.5");
request.ContentType = "application/x-www-form-urlencoded";
request.Headers.Add("UA-CPU", "x86");
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
//request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; QQDownload 1.7; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.3; .NET4.0E; .NET4.0C; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
request.KeepAlive = true;
request.Headers.Add(HttpRequestHeader.Pragma, "no-cache");
request.CookieContainer = myCookieContainer; // Get Http Response
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
response.Cookies = myCookieContainer.GetCookies(request.RequestUri); if (response.StatusCode == HttpStatusCode.OK)
{
Stream respStream = response.GetResponseStream(); if (response.ContentEncoding.ToLower().Contains("gzip"))
{
respStream = new GZipStream(respStream, CompressionMode.Decompress);
}
else if (response.ContentEncoding.ToLower().Contains("deflate"))
{
respStream = new DeflateStream(respStream, CompressionMode.Decompress);
} StreamReader reader = new StreamReader(respStream, encoding);
htmlText = reader.ReadToEnd();
reader.Close();
}
else
{
htmlText = "";
}
}
catch (Exception exc)
{
string error = exc.Message;
htmlText = "";
} return htmlText;
}
是的,登录成功后访问其他界面失败。
但是,同样的,在登录成功,发送消息都成功了的。用fiddler看了下,从登录以后的cookie都是
Cookie: bb_sessionhash=88bfd6e68924a85e49c092b0305b70ea; bb_lastvisit=1312717883; bb_lastactivity=0我用的是.net 4.0
不是因为那个隐藏域的问题么?
不过我用浏览器登录了下cookie如下Cookie: __qca=P0-987913275-1311653984851; __utma=1.248926489.1311653992.1311653992.1311653992.1; __utmz=1.1311653992.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __csref=http%3A%2F%2Fwww.howardforums.com%2F; __csh=1; bb_sessionhash=5568e5ce9320b29b2ba6016eb4cf538e; bb_lastvisit=1311743600; bb_lastactivity=0; __utma=143360556.1759626742.1311653992.1311685248.1311741073.3; __utmb=143360556.30.10.1311741073; __utmc=143360556; __utmz=143360556.1311653992.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __cst=46b6958d32c0aab4; __csv=acb9fbd72a4f494f|0; __csnv=f79075664e38fc3b; __ctl=acb9fbd72a4f494f1
但是我模拟产生的cookie是:Cookie: bb_sessionhash=88bfd6e68924a85e49c092b0305b70ea; bb_lastvisit=1312717883; bb_lastactivity=0