- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是不是遗漏了什么,或者这是 CookieContainer 中的错误?
我正在向容器中添加 3 个 cookie,然后我为 2 个 url 调用 GetCookieHeader 函数:
CookieContainer cc = new CookieContainer();
cc.Add(new Cookie("Cookie1", "1", "/a", "test.com"));
cc.Add(new Cookie("Cookie2", "2", "/a/0/", "test.com"));
cc.Add(new Cookie("Cookie3", "3", "/a/1/", "test.com"));
var result1 = cc.GetCookieHeader(new Uri("http://test.com/a/1/list"));
Assert.AreEqual("Cookie3=3; Cookie1=1", result1);
var result2 = cc.GetCookieHeader(new Uri("http://test.com/a/0/list"));
Assert.AreEqual("Cookie2=2; Cookie1=1", result2);
问题是最后一个断言抛出异常,因为返回的 header 仅为“Cookie2=2”。我看不出有任何理由可以省略 Cookie1 cookie - 根据 RFC6265,它应该返回两个类似于上面第一个断言的 cookie,不是吗?
几点说明:
cookie 都在容器中,所以问题不在于添加,而在于 GetHeader 函数。
添加 4、5 等 cookie 时此行为保持不变:只有与最后添加的 cookie 匹配的路径才会包含基本路径的 cookie!
当删除路径中的所有“a”并仅使用“/”、“/0/”和“/1/”作为 3 个 cookie 以及“http://test.com/1/list”和“的路径时,行为会发生变化http://test.com/0/list “在断言 URL 中)。然后所有断言都会成功 - 我希望“a”有相同的行为!
PS:让我添加规范中的相关部分:
如果至少满足以下条件之一,则请求路径路径匹配给定的 cookie 路径:
- cookie 路径和请求路径相同。
- cookie-path 是 request-path 的前缀,cookie-path 的最后一个字符是 %x2F ("/")。
- cookie-path 是请求路径的前缀,不包含在 cookie-path 中的请求路径的第一个字符是 %x2F ("/") 字符。
所以对我来说这显然是一个错误......?
最佳答案
我相信我找到了问题所在。在函数 InternalGetCookies(Uri) 的 System.Net.CookieContainer 类中,第 700-730 行附近有一个路径迭代。找到第一个路径后,添加这些 cookie,然后中断迭代,仅添加“/”的值!
换句话说:您只能从第一个匹配路径和“/”中获取cookie。对我来说,这是一个明显的不当行为,因此是一个错误 - 或者我不理解上面提到的 RFC。
关于c# - 严重的 CookieContainer 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27003836/
需要向需要特定 cookie 的服务器发出请求。能够使用带有 cookiecontainer 的 HTTP 客户端和处理程序来做到这一点。通过使用 Typed 客户端,无法找到设置 cookiecon
我想清除我的 CookieContainer 中的所有 cookie。如果我这样做: CookieContainer cookieContainer = new CookieContainer();
例如,在 .NET 2.0 项目上将 WebService 引用添加到 ASMX 服务时, var objService = new NameSpace.groupservices(); 存在, ob
我对 CookieContainer 如何处理域感到困惑,所以我创建了这个测试。此测试显示 cookieContainer 不会为“example.com”返回任何 cookie,但根据 RFC,它应
我想清除 CookieContainer 中收到的所有 cookie,而不需要初始化新的 CookieContainer、HttpClientHandler 和 HttpClient。有办法吗?我检查
我尝试使用循环来循环 cookie 容器,但它返回错误。如何将 CookieContainer 正确转换为 string foreach (Cookie item in cookieContainer
根据 MSDN CookieContainer.SetCookies应该 Adds Cookie instances for one or more cookies from an HTTP cook
我最近遇到了 CookieContainer 的一些问题。要么是我做错了什么,要么是 CookieContainer 对象存在某种错误。它似乎没有使用某些 Set-Cookie header 更新 c
我正在使用 WebClient 登录 Wordpress 博客,我的 Web 客户端方法: protected override WebRequest GetWebRequest(Uri addres
鉴于 CookieContainer 的实例是 not thread safe . Any public static (Shared in Visual Basic) members of this
如何在一个网站上冲浪,为每个网络请求分配相同的 CookieContainer? 最佳答案 这是我几年前写的类(class)。它不是很完整,并且在我完全理解一切是如何工作之前完成的(例如,它没有正确编
我是不是遗漏了什么,或者这是 CookieContainer 中的错误? 我正在向容器中添加 3 个 cookie,然后我为 2 个 url 调用 GetCookieHeader 函数: Cookie
我正在尝试使用 WebClient 在西里尔域名上执行授权。授权经过几个阶段,在普通域和 punicode 域之间进行重定向。问题是如果 HttpWebRequest 是由 punycode 域设置的
我有一个从名为 CookieJar 的 HttpWebRequest/HttpWebResponse session 中提取的 CookieContainer。我希望我的应用程序在运行之间存储 coo
此 answer显示如何将 cookie 添加到 HttpClient 请求。但其中一条评论警告说 CookieContainer缓存在 HttpClient 上。我的大部分 cookie 不应再次发
由于 .Net 中的 GeckoWebBrowser 与所有其他 GeckoWebBrowsers 实例共享 cookie,我希望 GeckoWebBrowser 拥有自己的 cookie 容器,该容
当我使用 HttpWebRequest 并添加: CookieContainer container = new CookieContainer(); request.CookieContainer
我的登录程序遇到了问题。如果我登录一次,然后将 CookieContainer 和 CookieCollection(以及我的 http 类)设置为 null,然后尝试再次登录,它仍然会提交来自第一个
您好,我在设置一个 cookie 时遇到了一些小问题。我正在使用 HttpWebRequest 类来发送我的请求。以及我需要的设置 cookie 的代码: CookieContainer my
我正在从事一个涉及一些基本网络爬行的项目。我一直在非常成功地使用 HttpWebRequest 和 HttpWebResponse。对于 cookie 处理,我只有一个 CookieContainer
我是一名优秀的程序员,十分优秀!