HttpWebRequest.CookieContainer 获取或设置与此请求关联的 Cookie。默认情况下CookieContainer 是null

它是一种数据结构, 它为Cookie类的实例提供存储, 并以类似于数据库的方式访问。 CookieContainer 具有一个容量限制, 该限制是在创建容器或由属性更改时设置的。

Cookie类的实例根据其源 URI 添加到容器中。 它会添加到与 URI CookieCollection关联的内部。 从基于 URI CookieCollection的容器中检索, 或者作为可用于提交 HTTP WebRequests 的字符串从容器中检索。

Cookie 有三个属性, 这些属性控制容器的内容量: Capacity、 MaxCookieSizePerDomainCapacity。 CookieContainer 这些值分别为300、4096和20的默认设置。 当将Cookie添加到容器时,这些属性用于确定是否应丢弃CookieContainer中已包含的Cookie以便为新容器腾出空间。 Cookie 跟踪每个加法, 以确保Capacity 不会超过或PerDomainCapacity限制。 CookieContainer 如果超过其中一个或两个, Cookie则将删除由CookieContainer保留的实例。 首先, 删除任何Cookie过期的。 如果必须回收更多的容量, 则会清除最近最少使用CookieCollection的空间。

出于安全原因,默认情况下禁用了 cookie。 如果你想要使用 cookie,则使用CookieContainer属性,以便启用 cookie。

下面的代码示例将请求发送到的 URL,并显示在响应中返回的 cookie。

 using System.Net;
using System;
namespace Examples.System.Net.Cookies
{
// 此示例在命令行中运行。
// 指定一个参数:发送请求的主机的名称。
// 如果请求成功,该示例将显示主机返回的cookie的内容。 public class CookieExample
{
public static void Main(string[] args)
{
if (args == null || args.Length != )
{
Console.WriteLine("Specify the URL to receive the request.");
Environment.Exit();
}
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(args[]);
request.CookieContainer = new CookieContainer(); HttpWebResponse response = (HttpWebResponse) request.GetResponse(); // Print the properties of each cookie.
foreach (Cookie cook in response.Cookies)
{
Console.WriteLine("Cookie:");
Console.WriteLine("{0} = {1}", cook.Name, cook.Value);
Console.WriteLine("Domain: {0}", cook.Domain);
Console.WriteLine("Path: {0}", cook.Path);
Console.WriteLine("Port: {0}", cook.Port);
Console.WriteLine("Secure: {0}", cook.Secure); Console.WriteLine("When issued: {0}", cook.TimeStamp);
Console.WriteLine("Expires: {0} (expired? {1})",
cook.Expires, cook.Expired);
Console.WriteLine("Don't save: {0}", cook.Discard);
Console.WriteLine("Comment: {0}", cook.Comment);
Console.WriteLine("Uri for comments: {0}", cook.CommentUri);
Console.WriteLine("Version: RFC {0}" , cook.Version == ? "" : ""); // Show the string representation of the cookie.
Console.WriteLine ("String: {0}", cook.ToString());
}
}
}
} // 此示例的输出将根据指定的主机名而有所不同,但将类似于以下内容。
/*
Cookie:
CustomerID = 13xyz
Domain: .contoso.com
Path: /
Port:
Secure: False
When issued: 1/14/2003 3:20:57 PM
Expires: 1/17/2013 11:14:07 AM (expired? False)
Don't save: False
Comment:
Uri for comments:
Version: RFC 2965
String: CustomerID = 13xyz
*/
CookieContainer 在 .NET3.5 与 .NET4.0 中的不同
.NET Framework 4.0 中的 HttpWebRequest.CookieContainer 有bug,参考:https://www.crifan.com/baidu_emulate_login_for_dotnet_4_0_error_the_fisrt_two_args_should_be_string_type_0_1/

最新文章

  1. python数据结构
  2. Translucent Bar Android状态栏自定义颜色
  3. HGE引擎之hgeSprite
  4. android 使用代码实现 RelativeLayout布局
  5. Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库
  6. C#总结1
  7. JQuery和UpdatePannel的问题
  8. AQS详解
  9. zoj2588 Burning Bridges --- 寻求尖端
  10. 阿里宣布Atlas正式开源:带你重返App开发的田园时代
  11. Oracle Windows安装图解
  12. 阿里电话面试问题----100万个URL如何找到出现频率最高的前100个?
  13. GitHub访问慢
  14. 一: WCF的服务端与客户端在通信时有三种模式:请求响应模式、数据报模式和双工通讯模式。
  15. Win10安装CAD2006
  16. 谈谈我们对userAgent的看法,为什么爬虫中需要userAgent?
  17. ScreenOper
  18. 2018.07.30 cogs2632. [HZOI 2016] 数列操作d(线段树)
  19. JS转换HTML转义符,防止javascript注入攻击,亲测可用
  20. 八个常用的js正则表达式

热门文章

  1. Date以及LocalDateTime格式化
  2. 【RT-Thread笔记】IO设备模型及GPIO设备
  3. 【C#夯实】我与接口二三事:IEnumerable、IQueryable 与 LINQ
  4. 拒绝CPU挖矿矿工有责
  5. C# - MD5验证
  6. CentOS7下配置防火墙放过Keepalived
  7. 探究java对象头
  8. C#中怎样跨窗体调用事件-从事件订阅实例入手
  9. 百度地图分布图(百度地图api司机位置实时定位分布图)
  10. Django框架(十七)-- CBV源码分析、restful规范、restframework框架