这两天做了一个获取cookie并且携带此cookie去请求另外一个url地址,中间携带cookie用了两种方式:
1. httpRequest.CookieContainer= cookie (此cookie为一个cookie容器对象)
2.httpRequest.Headers.Add("Cookie", cookie) (此cookie为一个cookie字符串) 测试结果:1种方式cookie失效并且丢失。2种方式携带成功并且可以成功显示已登录。 原因待查,记录下。
说明:也可能cookie容器设置的方式有问题。 附上代码: public class Login
{
public string GetCookie(string postString, string postUrl)
{ CookieContainer cookie = new CookieContainer(); HttpWebRequest httpRequset = (HttpWebRequest)HttpWebRequest.Create(postUrl);//创建http 请求
httpRequset.CookieContainer = cookie;//设置cookie
httpRequset.Method = "POST";//POST 提交
httpRequset.KeepAlive = true;
httpRequset.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36";
httpRequset.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
httpRequset.ContentType = "application/x-www-form-urlencoded";//以上信息在监听请求的时候都有的直接复制过来
httpRequset.Referer = "http://my.qianlima.com/login.jsp";
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(postString);
httpRequset.ContentLength = bytes.Length;
Stream stream = httpRequset.GetRequestStream();
stream.Write(bytes, , bytes.Length);
stream.Close();//以上是POST数据的写入 HttpWebResponse httpResponse = (HttpWebResponse)httpRequset.GetResponse();//获得 服务端响应
var str = cookie.GetCookieHeader(httpRequset.RequestUri);
return str;//拿到cookie
} public string GetContent(string cookie, string url)
{
string content;
HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(url);
httpRequest.Headers.Add("Cookie", cookie);
httpRequest.Referer = url;
httpRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36";
httpRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
httpRequest.ContentType = "application/x-www-form-urlencoded";
httpRequest.Method = "GET"; HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse(); using (Stream responsestream = httpResponse.GetResponseStream())
{ using (StreamReader sr = new StreamReader(responsestream, System.Text.Encoding.Default))
{
content = sr.ReadToEnd();
}
} return content;
}
}
此文章由机器翻译。 将光标移到文章的句子上,以查看原文。 更多信息。
译文
原文

CookieContainer 类

.NET Framework 4.6 and 4.5
 
其他版本
 

为 CookieCollection 对象的集合提供容器。

命名空间:   System.Net
程序集:  System(System.dll 中)

System::Object
System.Net::CookieContainer
语法

 
 
 
[SerializableAttribute]
public ref class CookieContainer
  名称 说明
CookieContainer()

初始化 CookieContainer 类的新实例。

CookieContainer(Int32)

使用指定的表示容器可以包含的 Cookie 实例数的值初始化 CookieContainer 类的新实例。

CookieContainer(Int32, Int32, Int32)

使用指定属性初始化 CookieContainer 类的新实例。

属性

 
 
  名称 说明
Capacity

获取和设置 CookieContainer 可以包含的 Cookie 实例数。

Count

获取 CookieContainer 当前包含的 Cookie 实例数。

MaxCookieSize

表示 Cookie 的最大允许长度。

PerDomainCapacity

获取和设置 CookieContainer 可以在每个域包含的 Cookie 实例数。

方法

 
 
  名称 说明
Add(Cookie^)

将 Cookie 添加到 CookieContainer。此方法使用 Cookie 中的域来确定将 Cookie 与哪个域集合相关联。

Add(CookieCollection^)

将 CookieCollection 的内容添加到 CookieContainer 中。

Add(Uri^, Cookie^)

将 Cookie 添加到特定 URI 的 CookieContainer 中。

Add(Uri^, CookieCollection^)

将 CookieCollection 的内容添加到特定 URI 的 CookieContainer 中。

Equals(Object^)

确定指定的对象是否等于当前对象。(从 Object 继承。)

Finalize()

在垃圾回收将某一对象回收前允许该对象尝试释放资源并执行其他清理操作。(从 Object 继承。)

GetCookieHeader(Uri^)

获取 HTTP Cookie 标头,该标头包含表示与特定 URI 关联的 Cookie 实例的 HTTP Cookie。

GetCookies(Uri^)

获取包含与特定 URI 关联的 Cookie 实例的 CookieCollection

GetHashCode()

作为默认哈希函数。(从 Object 继承。)

GetType()

获取当前实例的 Type。(从 Object 继承。)

MemberwiseClone()

创建当前 Object 的浅表副本。(从 Object 继承。)

SetCookies(Uri^, String^)

将 HTTP Cookie 标头中的一个或多个 Cookie 的 Cookie 实例添加到特定 URI 的 CookieContainer 中。

ToString()

返回表示当前对象的字符串。(从 Object 继承。)

字段

 
 
  名称 说明
DefaultCookieLengthLimit

表示 CookieContainer 可以包含的 Cookie 实例的默认最大大小(以字节为单位)。此字段为常数。

DefaultCookieLimit

表示 CookieContainer 可以包含的 Cookie 实例的默认最大数目。此字段为常数。

DefaultPerDomainCookieLimit

表示 CookieContainer 可以在每个域引用的 Cookie 实例的默认最大数目。此字段为常数。

备注

 
 

CookieContainer 是为 Cookie 类的实例提供存储空间的数据结构,该结构以类似于数据库的方式来进行访问。 CookieContainer 具有容量限制,此限制在创建容器或通过属性更改容器时设置。

Cookie 类的实例被添加到基于其起始 URI 的容器。它会被添加到与该 URI 关联的内部 CookieCollection。 Cookie 作为 CookieCollection 或作为可用于提交 HTTP WebRequest 的字符串,从基于该 URI 的容器中进行检索。

CookieContainer 有三项属性用于管理容器的内容容量:CapacityMaxCookieSize 和 PerDomainCapacity。这些值的默认设置分别为 300、4096 和 20。当一个 Cookie 被添加到容器中时,这些属性将用于确定是否应丢弃已包含在 CookieContainer 中的 Cookie,以便给新的 Cookie 让出空间。 CookieContainer 对每一次添加进行跟踪,以确保不会超过 Capacity 限制或 PerDomainCapacity 限制。如果超过这两项限制或其中一项限制,则将移除 CookieContainer 所包含的 Cookie 实例。首先,所有过期的 Cookie 都将被移除。如果必须进一步收回容量,则清除最早使用的CookieCollection

httpRequest.CookieContainer= cookie 与 httpRequest.Headers.Add("Cookie", cookie)的更多相关文章

  1. cookie导读,理解什么是cookie

    一.cookie导读,理解什么是cookie    1.什么是cookie:cookie是一种能够让网站服务器把少量数据(4kb左右)存储到客户端的硬盘或内存.并且读可以取出来的一种技术.    2. ...

  2. Cookie的使用、Cookie详解、HTTP cookies 详解、获取cookie的方法、客户端获取Cookie、深入解析cookie

    Cookie是指某些网站为了辨别用户身份.进行session跟踪而存储在用户本地终端上的数据(通常经过加密),比如说有些网站需要登录才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么我 ...

  3. 易懂 易上手的cookie 最简单明了 js中cookie的使用方法及教程

    今天项目中需要用到cookie 看到我的cookie不行了 大喊一声我曹 怎么可以这样 我就疯狂的在网上找 找啊 找 但是我感觉都太官方了   废话不说 看栗子 1.引入jQuery与jQuery.C ...

  4. jquery.cookie.js && java后台代码 操作cookie实现记住当前用户输入信息代码

    下载jquery.cookie.js地址看这里:http://pan.baidu.com/s/1gdCPaN5 //初始化页面时验证是否记住了密码 $(document).ready(function ...

  5. Python中Cookie的处理(一)Cookie库

    Cookie用于服务器实现会话,用户登录及相关功能时进行状态管理.要在用户浏览器上安装cookie,HTTP服务器向HTTP响应添加类似以下内容的HTTP报头: Set-Cookie:session= ...

  6. 【转】js中通过docment.cookie获取到的内容不完整! 在浏览器的application里的cookie里可以看到完整的cookie,个别字段无法通过document.cookie获取。 是否有其他办法可以获取到??

    js中通过docment.cookie获取到的内容不完整!在浏览器的application里的cookie里可以看到完整的cookie,个别字段无法通过document.cookie获取.是否有其他办 ...

  7. 关于设置cookie同源,axios请求加上cookie

    一个有cookie  一个没有 这是为啥!! axios都设置了的为true允许携带cookie 大佬答疑解惑:==>cookie同源域名才有啊,在Application看看cookie的pat ...

  8. js中实现cookie的增删改查(document.cookie的使用详情)

    一.设置cookie的值 1.每个cookie都是一个名称/值对,名称/值对用等号连接,并将该名称/值对赋值给document.cookie即可.如:document.cookie="id= ...

  9. Cookie文件说明及IE的Cookie文件格式

    1.Cookie文件的实质 Cookie实际上是Web服务端与客户端(典型的是浏览器)交互时彼此传递的一部分内容,内容可以是任意的,但要在允许的长度范围之内.客户端会将它保存在本地机器上(如IE便会保 ...

随机推荐

  1. iOS UIView添加阴影

    _bottomView.layer.masksToBounds = NO; _bottomView.backgroundColor = [UIColor whiteColor]; _bottomVie ...

  2. 详细的obs操作教程(windows/mac)图解

    直播推流软件obs操作配置教程包含支持mac和windows配置 1 2 3 4 5 6 7 8 9

  3. Codeforces 14D Two Paths 树的直径

    题目链接:点击打开链接 题意:给定一棵树 找2条点不反复的路径,使得两路径的长度乘积最大 思路: 1.为了保证点不反复,在图中删去一条边,枚举这条删边 2.这样得到了2个树,在各自的树中找最长链.即树 ...

  4. Google Code Jam 2014 资格赛:Problem B. Cookie Clicker Alpha

    Introduction Cookie Clicker is a Javascript game by Orteil, where players click on a picture of a gi ...

  5. ubuntu安装源

    1.编辑sources.list文件 sudo vi /etc/apt/sources.list 添加以下安装源 #台湾源 deb http://tw.archive.ubuntu.com/ubunt ...

  6. vue实践---vue不依赖外部资源实现简单多语

    vue使用多语,最常见的就是 vue-i18n, 但是如果开发中的多语很少,比如就不到10个多语,这样就没必要引入vue-i18n了, 引入了反正导致代码体积大了,这时候单纯用vue实现多语就是比较好 ...

  7. 趣味编程:C#中Specification模式的实现(参考答案 - 下)

    一篇文章中我们利用C#语言的特性实现了一种轻量级的Specification模式,它的关键在于抛弃了具体的Specification类型,而是使用一个委托对象代替唯一关键的IsSatisfiedBy方 ...

  8. B. Worms Codeforces Round #271 (div2)

    B. Worms time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  9. Educational Codeforces Round 1 (C) (atan2 + long double | 大数)

    这题只能呵呵了. 东搞西搞,折腾快一天,最后用了一个800多行的代码AC了. 好好的题目你卡这种精度干啥. 还有要卡您就多卡点行不,为什么long double 又可以过... 废了N长时间写个了不管 ...

  10. 【BZOJ3689】异或之 堆+可持久化Trie树

    [BZOJ3689]异或之 Description 给定n个非负整数A[1], A[2], ……, A[n].对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A ...