我正在创建一个客户端来访问一个网站并自动登录 + 执行一些任务,但是他们最近将他们的 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 时,我得到如下信息:(cookie,格式为:“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
但如果这是真的,是否有一种优雅的方式来处理可能出现在其中一个值中的逗号?