利用HttpWebReuest获取需要身份验证的页面信息
2007-09-01 22:12
393 查看
我们用HttpWebRequest获取页面时,有的页面需要登录后才能获取。在大部分的web程序中,是用cookie来保存用户信息的,只要在发送WebRequest的时候附上用户的cookie信息,就可以很容易的获取到需要身份验证的页面信息了(本文也只讨论这种情况)。
方式如下:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.AllowAutoRedirect = false; //禁止自动重定向
string cookieinfo = "Cookie: .ASPXAUTH=12EB2C50";
req.Headers.Add(cookieinfo);
可能有人会问第三行的cookieinfo是如何获取的,非常简单,首先用ie登录,登录时选取记住我的密码选项(大部分页面都有这种选项)。然后用ie登录你想要获取的页面url,同时监控ie的http头信息,从中即可找到类似"Cookie: .ASPXAUTH=12EB2C50"的选项,这个就是cookie的信息了,只要在你的WebRequest的头中加上如此信息即可。
注意代码中的第二行:
req.AllowAutoRedirect = false; //禁止自动重定向
该代码的作用是禁止自动重定向,如果没有该选项可能导致获取的页面是重定向的页面,而不是你要的页面。
这种方法简单易行。然而,有的页面无法记住密码选项,并且cookie比较容易失效。用ie获取的cookie很难供HttpWebReuest使用,这时就需要用HttpWebReuest来进行登录操作,从而获取该session的cookie。
登录方式如下:
HttpWebRequest reqlog = (HttpWebRequest)WebRequest.Create("http://localhost:2565/AspStudy/login.aspx");
//开启cookie以启用session
reqlog.CookieContainer = new
CookieContainer();
reqlog.AllowAutoRedirect = false; //禁止自动重定向
reqlog.ServicePoint.Expect100Continue = false; //禁止100Continue
reqlog.Method = "POST";
reqlog.KeepAlive = true;
reqlog.ContentType = "application/x-www-form-urlencoded";
//req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";
//此处post的信息格式可以通过httplook来得到
string info = "user=usr pwd=123";
byte[] loginfo = Encoding.ASCII.GetBytes(info);
//reqlog.ContentLength = loginfo.Length;
Stream reqStream = reqlog.GetRequestStream();
reqStream.Write(loginfo, 0, loginfo.Length);
reqStream.Close();
HttpWebResponse resp = reqlog.GetResponse() as
HttpWebResponse;
Console.WriteLine(resp.Headers.ToString());
//判断是否登陆成功
if (resp.StatusCode != HttpStatusCode.Found)
{
throw
new
Exception("login fail");
}
//维持登陆时的session
req.CookieContainer = reqlog.CookieContainer;
reqlog用来登录,这里的代码只是一个实例,不同的网站采用了不同的方式登录,仍然需要通过抓包来获取登录的具体方式。
如果reqlog登录成功,reqlog中的CookieContainer便保存了cookie信息,在新的request中使用该CookieContainer即可维持session状态,也就可以获取用户登录后的页面信息了。
上述代码中有这样一行:
reqlog.ServicePoint.Expect100Continue = false; //禁止100Continue
该行作用是不响应100号应答,如果不进行该项设置可能导致一次性post不成功,需要在100应答后才发送post数据,比较麻烦。
方式如下:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.AllowAutoRedirect = false; //禁止自动重定向
string cookieinfo = "Cookie: .ASPXAUTH=12EB2C50";
req.Headers.Add(cookieinfo);
可能有人会问第三行的cookieinfo是如何获取的,非常简单,首先用ie登录,登录时选取记住我的密码选项(大部分页面都有这种选项)。然后用ie登录你想要获取的页面url,同时监控ie的http头信息,从中即可找到类似"Cookie: .ASPXAUTH=12EB2C50"的选项,这个就是cookie的信息了,只要在你的WebRequest的头中加上如此信息即可。
注意代码中的第二行:
req.AllowAutoRedirect = false; //禁止自动重定向
该代码的作用是禁止自动重定向,如果没有该选项可能导致获取的页面是重定向的页面,而不是你要的页面。
这种方法简单易行。然而,有的页面无法记住密码选项,并且cookie比较容易失效。用ie获取的cookie很难供HttpWebReuest使用,这时就需要用HttpWebReuest来进行登录操作,从而获取该session的cookie。
登录方式如下:
HttpWebRequest reqlog = (HttpWebRequest)WebRequest.Create("http://localhost:2565/AspStudy/login.aspx");
//开启cookie以启用session
reqlog.CookieContainer = new
CookieContainer();
reqlog.AllowAutoRedirect = false; //禁止自动重定向
reqlog.ServicePoint.Expect100Continue = false; //禁止100Continue
reqlog.Method = "POST";
reqlog.KeepAlive = true;
reqlog.ContentType = "application/x-www-form-urlencoded";
//req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";
//此处post的信息格式可以通过httplook来得到
string info = "user=usr pwd=123";
byte[] loginfo = Encoding.ASCII.GetBytes(info);
//reqlog.ContentLength = loginfo.Length;
Stream reqStream = reqlog.GetRequestStream();
reqStream.Write(loginfo, 0, loginfo.Length);
reqStream.Close();
HttpWebResponse resp = reqlog.GetResponse() as
HttpWebResponse;
Console.WriteLine(resp.Headers.ToString());
//判断是否登陆成功
if (resp.StatusCode != HttpStatusCode.Found)
{
throw
new
Exception("login fail");
}
//维持登陆时的session
req.CookieContainer = reqlog.CookieContainer;
reqlog用来登录,这里的代码只是一个实例,不同的网站采用了不同的方式登录,仍然需要通过抓包来获取登录的具体方式。
如果reqlog登录成功,reqlog中的CookieContainer便保存了cookie信息,在新的request中使用该CookieContainer即可维持session状态,也就可以获取用户登录后的页面信息了。
上述代码中有这样一行:
reqlog.ServicePoint.Expect100Continue = false; //禁止100Continue
该行作用是不响应100号应答,如果不进行该项设置可能导致一次性post不成功,需要在100应答后才发送post数据,比较麻烦。
相关文章推荐
- 利用HttpWebReuest获取需要身份验证的页面信息(转)
- 利用HttpModule和forms身份验证,实现角色验证控制
- HttpWebResponse 远程服务器返回错误: (407) 需要代理身份验证。
- 利用Jsoup获取HTML页面的标签信息
- 简单的 利用 parser 获取页面信息
- 关于HttpWebRequest和HttpWebResponse 虚拟web访问(含需要身份验证,和不需身份验证)
- java HttpClient 获取页面Cookie信息
- 4.2用户登陆和安全验证(利用HttpModule集中处理身份检查)
- asp下利用XMLHTTP 从其他页面获取数据的代码
- 微信企业号OAuth2.0验证接口来获取成员的身份信息
- 利用HttpRequest登录到某个网站,然后获取网站信息的程序示例
- 利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
- 切换导航标签实现当前标签颜色改变以及利用js如何准确获取当前页面url网址信息
- 获取需要登陆才能被访问的页面,HttpClient(扩展HttpWebRequest)来实现
- servlet获取前台的验证信息(html页面)
- 利用HttpRequest登录到某个网站,然后获取网站信息的程序示例
- VC 获取托盘图标信息 . (2012-12-11 20:33:58) 标签: it 分类: 基础知识 //本例以获取程序托盘图标位置为例 //根据需要还可以获取不少信息 参考:http://www.
- 利用Microsoft.XMLHTTP定制页面无刷新自动检索提示信息
- 有时候需要统计手机的型号和版本号,利用程序可以获取到相应的手机信息.
- asp.net 下利用DirectoryEntry验证用户及获取域控制器下的用户结构信息