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. 怎样用 C# 快速比较 2 个文件是否是相同的文件?

    方案1: 直接贴代码了: using System; using System.Collections.Generic; using System.IO; using System.Linq; usi ...

  2. 一个简单的利用 WebClient 异步下载的示例(五)(完结篇)

    接着上一篇,我们继续来优化.我们的 SkyParallelWebClient 可否支持切换“同步下载模式”和“异步下载模式”呢,好处是大量的代码不用改,只需要调用 skyParallelWebClie ...

  3. Redis(七)分布式锁

    前面学习了Redis的数据结构以及命令.Redis中的事务和Redis对Lua脚本的支持. 这一章就对Redis这些特性做一下实战性应用--基于Redis的分布式锁实现. Lock和Distribut ...

  4. dedecms5.7的文章详情页页面标题加载指定txt文本的随机关键字

    dedecms5.7的文章详情页加载指定txt文本的随机关键字 1 实现代码如下 {dede:name runphp='yes'} $file_path = "../test.txt&quo ...

  5. 2019-9-2-win10-uwp-判断本地ip

    原文:2019-9-2-win10-uwp-判断本地ip title author date CreateTime categories win10 uwp 判断本地ip lindexi 2019-0 ...

  6. word转txt

    import org.apache.poi.hwpf.extractor.WordExtractor; import java.io.IOException; import java.io.Input ...

  7. CTF必备技能丨Linux Pwn入门教程——调整栈帧的技巧

    Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...

  8. element实现vue级联多选

    已经有大神完成element的改造github:https://github.com/webCoderJ/ele-multi-cascader#Attributes 已实践可用

  9. 章节十一、6-操作集合里面的Web元素

    以下演示操作以该网站为例:https://learn.letskodeit.com/p/practice 一.如何操作多个元素(把多个元素放到集合容器中然后操作它们) 列如我们需要操作这些单选框:: ...

  10. pandas 之 datetime 初识

    import numpy as np import pandas as pd 认识 Time series data is an impotant from of data in many diffe ...