WebClient-Session和Cookie

背景知识:Session和Cookie

http://blog.csdn.net/X_Craft/archive/2009/07/19/4361989.aspx

WebClient不会保存http响应报文中的SetCookie,更不会设置下一次http请求报文的Cookie,通过HTTP分析工具可以观察到这一点。也就是说两个WebClient调用之间不具有持续性。

在session方面一个典型的应用就是自动登录,在“Session和Cookie”一章中有一个Login.asp和ListData.asp,Login.asp在session中记录用户登录信息,ListData.asp中操作这个信息,而贯穿这两个页面的条件是session id和同一浏览器,服务端在Login.asp的HTTP响应报文头的SetCookie中返回session id浏览器在内存中保存session id 并在下一次对ListData.asp的请求报文中设置Cookie内容为session id,因为WebClient不具持续性,所以默认情况下利用WebClient是无法实现Login.asp自动登录后再调用ListData.asp显示出正确的用户名的。

在cookie方面,“Session和Cookie”一章中的Welcome.asp是一个典型例子,服务端在WelCome.asp响应报文头的SetCookie段中返回Cookie内容,浏览器会在磁盘上保存这个cookie,并在下一次对Welcom.asp的请求报文头中设置Cookie内容,因为WebClient不具持续性所以使用WebClient去访问这个页面,始终会返回第一次登录的信息。

无论是上述的session还是cookie应用,要使WebClient具有持续性,就需要在代码中处理SetCookie和Cookie

一种方式是直接处理WebClient的请求和响应报文头,以下是登录应用的示例代码

view plaincopy to clipboardprint?
WebClient webClient = new WebClient();  
String str = webClient.DownloadString(@"http://127.0.0.1/session/login.asp");  
Trace.WriteLine(str);  
Thread.Sleep(3000);  
//读取HTTP响应的SetCookie段  
str = webClient.ResponseHeaders[HttpResponseHeader.SetCookie];  
Trace.WriteLine(str);  
//在下一次HTTP请求中加入Cookie  
webClient.Headers[HttpRequestHeader.Cookie] = str;  
str = webClient.DownloadString(@"http://127.0.0.1/session/listdata.asp");  
Trace.WriteLine(str); 
            WebClient webClient = new WebClient();
            String str = webClient.DownloadString(@"http://127.0.0.1/session/login.asp");
            Trace.WriteLine(str);
            Thread.Sleep(3000);
            //读取HTTP响应的SetCookie段
            str = webClient.ResponseHeaders[HttpResponseHeader.SetCookie];
            Trace.WriteLine(str);
            //在下一次HTTP请求中加入Cookie
            webClient.Headers[HttpRequestHeader.Cookie] = str;
            str = webClient.DownloadString(@"http://127.0.0.1/session/listdata.asp");
            Trace.WriteLine(str);

对于Welcome.asp的处理也是一样

另一种方式是继承WebClient,重写GetWebRuquest方法,具体代码请参考网上的相关文章。

参考资料:

WebClient类的使用中遇到的几个问题

http://bccu.cnblogs.com/archive/2006/04/29/388770.aspx

从WebBrowser中取得Cookie 和 WebClient设置cookie!

http://www.cnblogs.com/cai9911/archive/2008/03/05/1091443.html

实现支持会话的WebClient

http://www.cnblogs.com/listhome/archive/2007/11/22/968963.html

WebClient 保持 Session 和 Cookie

http://www.cnblogs.com/anjou/archive/2008/05/25/1206832.html

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/X_Craft/archive/2009/07/20/4362398.aspx

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值