【发布时间】:2009-07-16 09:23:15
【问题描述】:
我正在创建一个客户端来访问一个网站并自动登录 + 执行一些任务,但是他们最近更新了他们的 cookie(无论出于何种原因......)在他们的标识 cookie 中包含一个逗号。
因此,例如,Cookie 将具有类似于以下的值:
a,bcdefghijklmnop
问题是,根据msdn,您不能在 cookie 的值中使用逗号或句点。我正在寻找一种解决此限制的方法,一种使 .net 的 Cookie 与逗号配合得很好的方法。我发现服务器确实向客户端发送了一个“SET-COOKIE”标头,我猜这就是正在解析的内容,但这似乎也显然给命令和分号赋予了特殊含义(因此限制.NET 本身内部的类)。
但是,IE、Firefox 等浏览器是如何正确处理 cookie 的(正如他们显然所做的那样,因为该网站在我测试过的任何浏览器中都可以正常工作。)有没有办法在 .NET 中强制执行此行为?
任何帮助将不胜感激,谢谢。
--- 编辑 ---
一些附加信息:
我的代码如下所示:
request = (HttpWebRequest)WebRequest.Create(URI);
request.CookieContainer = Program.client.cookieJar;
其中 cookieJar 在 Program.client 中定义为:
CookieContainer cookieJar = new CookieContainer();
当我遍历并打印出 CookieContainer 中的所有 cookie 时,我得到如下信息:(cookies,格式为:“name”->“value”)
"normal_cookie" -> "i am the value"
"messedup_cookie" -> "a"
"bcdefghijklmnop" -> ""
// What I should get is this:
"normal_cookie" -> "i am the value"
"messedup_cookie" -> "a,bcdefghijklmnop"
问题的核心似乎是逗号和分号是 SET-COOKIE 标头字符串中的保留字符...但是浏览器如何处理呢?我可能可以自己解析字符串,但我不知道如何解决这种情况:(HTTP 标头,格式为:“name”->“value”)
"Set-Cookie" -> "messedup_cookie=a,bcdefghijklmnop; path=/; domain=.domain.com; expires=Sat, 15-Aug-2009 09:14:24 GMT,anothervariable=i am the value;"
如您所见,expires 部分查找逗号而不是分号以将其与下一个变量区分开来。据我所知,格式如下:
cookie1_var1=value; cookie1_var2=value,cookie2_var1=value; cookir2_var2=value
但如果这是真的,是否有一种优雅的方式来处理可能出现在其中一个值中的逗号?
【问题讨论】:
标签: c# .net cookies httpclient cookiecontainer