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/

C# HTTP系列4 HttpWebRequest.CookieContainer属性的更多相关文章

  1. C# HTTP系列3 HttpWebRequest.ContentType属性

    系列目录     [已更新最新开发文章,点击查看详细] 获取或设置请求的 Content-type HTTP 标头的值.默认值为null. 常见的请求内容类型为以下几种: /// <summar ...

  2. C# HTTP系列7 HttpWebRequest.Method属性

    系列目录     [已更新最新开发文章,点击查看详细] HttpWebRequest.Method属性,获取或设置请求的方法.用于联系 Internet 资源的请求方法. 默认值为 GET. Syst ...

  3. C# HTTP系列1 HttpWebRequest类

    系列目录     [已更新最新开发文章,点击查看详细] .NET Framework 中 System.Net 命名空间下提供了 HttpWebRequest 和 HttpWebResponse 2个 ...

  4. C# HTTP系列5 HttpWebResponse.StatusCode属性

    系列目录     [已更新最新开发文章,点击查看详细] HttpWebResponse.StatusCode 属性获取响应的状态.对应 HttpStatusCode 枚举值之一. HttpStatus ...

  5. 深入理解javascript函数系列第三篇——属性和方法

    × 目录 [1]属性 [2]方法 前面的话 函数是javascript中的特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本 ...

  6. httpWebRequest.ContentType 属性、值 类型用法

    httpWebRequest.ContentType 属性.值 类型用法 冰火战地 指定将数据回发到服务器时浏览器使用的编码类型.下边是说明: application/x-www-form-urlen ...

  7. HttpWebRequest.ReadWriteTimeout 属性

    获取或设置写入或读取流时的超时. 属性值在写入超时或读取超时之前的毫秒数.默认值为 300,000 毫秒(5 分钟). 备注 在写入由 GetRequestStream 方法返回的流时,或在读取由 G ...

  8. 问题:request.Headers;结果:HttpWebRequest.Headers 属性

    指定构成 HTTP 标头的名称/值对的集合. Headers 集合包含与请求关联的协议标头.下表列出了由系统或由属性或方法设置但未存储在 Headers 中的 HTTP 标头.   标头 设置方 Ac ...

  9. HttpWebRequest.Method 属性

    public static void GetHead(string url) { var http = (HttpWebRequest)WebRequest.Create(url); http.Met ...

随机推荐

  1. A query was run and no Result Maps were found for the Mapped Statement

    mybatis测试方法报错: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exec ...

  2. SpringBoot整合kafka(实现producer和consumer)

    本文代码使用的是Spring Boot 2.1.8.RELEASE 版本 <parent> <groupId>org.springframework.boot</grou ...

  3. Docker Hub镜像加速器

    国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器.Docker 官方和国内很多云服务商都提供了国内加速器服务. 1.配置加速地址 vim /etc/docker/daemo ...

  4. PHP 数组函数大全

    PHP数组函数是核心的一部分.无需安装即可使用这些函数 函数名称 描述 array_change_key_case 将数组中的所有键名修改为全大写或小写 array_chunk 将一个数组分割成多个 ...

  5. iframe子元素无法全屏

    最近做的项目中遇到的问题: 在最新的Chrome浏览器中,全屏功能正常 在旧版本Chrome浏览器中(与最新版版本号相差二十左右),全屏功能无效 在IE11浏览器中,全屏功能无效 反复排查,发现该项目 ...

  6. SharpGL之透视投影和摄像机

    当三维体放在世界坐标系中后,由于显示器只能用二维图像显示三维休,因此必须要依赖投影来把三维体降低维数. 投影变换的目的就是定义了一个视景体,使得视景体外多余的部分不会显示. 投影包括透视投影(pers ...

  7. inndo 表与存储逻辑_1

    ------------------------------------------2015-03-03--------------------------------------- 表 : inno ...

  8. python从入门到放弃之进程锁lock

    # ### lock (互斥锁)"""# 应用在多进程当中# 互斥锁lock : 互斥锁是进程间的get_ticket互相排斥进程之间,谁先抢占到资源,谁就先上锁,等到解 ...

  9. c# 根据一个给定经纬度的点和距离,搜索附近5公里范围的地点

    功能需求:需要查询一个站点(已知该站点经纬度)5公里范围内的其它站点. 方 法 一 :对每条记录,去进行遍历,跟数据库中的每一个点进行距离计算,当距离小于5公里时,认为匹配(效率极其低下,耗时长). ...

  10. Python环境安装与基础语法(4)——内存管理、if分支

    Python内存管理 python中有自动清理内存垃圾的功能,当变量的引用计数为0,则可以被有计划的垃圾回收GC 常量会在系统中被多次引用,所以常量的引用计数无法确定 程序控制 顺序:按照先后顺序逐条 ...