利用HttpWebReuest获取需要身份验证的页面信息

我们用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数据,比较麻烦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值