功能说明:抓取需要登陆、并且验证码才能访问的页面,难点在于模仿登陆和验证码
在度娘的帮助下,找了很多的代码,但是,没有一个可以用的。
大概步骤是这样子的,使用HttpWatch抓包,看看登陆的时候post的数据,然后使用代码模拟,但是,我不知道如何获取登陆后的Cookie和抓取的时候也把这个Cookie捎上,而且,另外一个技术点是验证码。有做过这方面的牛人请教下!谢谢!!
public void Login(string UserName, string UserPwd, string LoginUrl, out string Txt)
{
try
{
//定义Cookie容器
CookieContainer CookieArray = new CookieContainer();
//创建Http请求
HttpWebRequest LoginHttpWebRequest = (HttpWebRequest)WebRequest.Create(LoginUrl);
//登录数据
string LoginData = string.Format("email={0}&password={1}&operate={2", UserName, UserPwd, "login");
//数据被传输类型
LoginHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
//数据长度
LoginHttpWebRequest.ContentLength = LoginData.Length;
//数据传输方法 get或post
LoginHttpWebRequest.Method = "POST";
//设置HttpWebRequest的CookieContainer为刚才建立的那个CookieArray
LoginHttpWebRequest.CookieContainer = CookieArray;
//获取登录数据流
Stream myRequestStream = LoginHttpWebRequest.GetRequestStream();
//StreamWriter
StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.Default);
//把数据写入HttpWebRequest的Request流
myStreamWriter.Write(LoginData);
//关闭打开对象
myStreamWriter.Close();
myRequestStream.Close();
//新建一个HttpWebResponse
HttpWebResponse myHttpWebResponse = (HttpWebResponse)LoginHttpWebRequest.GetResponse();
//获取一个包含url的Cookie集合的CookieCollection
myHttpWebResponse.Cookies = CookieArray.GetCookies(LoginHttpWebRequest.RequestUri);
WebHeaderCollection a = myHttpWebResponse.Headers;
Stream myResponseStream = myHttpWebResponse.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.Default);
Txt = myStreamReader.ReadToEnd();
//把数据从HttpWebResponse的Response流中读出
myStreamReader.Close();
myResponseStream.Close();
}
catch (Exception ex)
{
throw ex;
}
}
在度娘的帮助下,找了很多的代码,但是,没有一个可以用的。
大概步骤是这样子的,使用HttpWatch抓包,看看登陆的时候post的数据,然后使用代码模拟,但是,我不知道如何获取登陆后的Cookie和抓取的时候也把这个Cookie捎上,而且,另外一个技术点是验证码。有做过这方面的牛人请教下!谢谢!!
public void Login(string UserName, string UserPwd, string LoginUrl, out string Txt)
{
try
{
//定义Cookie容器
CookieContainer CookieArray = new CookieContainer();
//创建Http请求
HttpWebRequest LoginHttpWebRequest = (HttpWebRequest)WebRequest.Create(LoginUrl);
//登录数据
string LoginData = string.Format("email={0}&password={1}&operate={2", UserName, UserPwd, "login");
//数据被传输类型
LoginHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
//数据长度
LoginHttpWebRequest.ContentLength = LoginData.Length;
//数据传输方法 get或post
LoginHttpWebRequest.Method = "POST";
//设置HttpWebRequest的CookieContainer为刚才建立的那个CookieArray
LoginHttpWebRequest.CookieContainer = CookieArray;
//获取登录数据流
Stream myRequestStream = LoginHttpWebRequest.GetRequestStream();
//StreamWriter
StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.Default);
//把数据写入HttpWebRequest的Request流
myStreamWriter.Write(LoginData);
//关闭打开对象
myStreamWriter.Close();
myRequestStream.Close();
//新建一个HttpWebResponse
HttpWebResponse myHttpWebResponse = (HttpWebResponse)LoginHttpWebRequest.GetResponse();
//获取一个包含url的Cookie集合的CookieCollection
myHttpWebResponse.Cookies = CookieArray.GetCookies(LoginHttpWebRequest.RequestUri);
WebHeaderCollection a = myHttpWebResponse.Headers;
Stream myResponseStream = myHttpWebResponse.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.Default);
Txt = myStreamReader.ReadToEnd();
//把数据从HttpWebResponse的Response流中读出
myStreamReader.Close();
myResponseStream.Close();
}
catch (Exception ex)
{
throw ex;
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货