【发布时间】:2020-03-11 00:56:39
【问题描述】:
我必须向我无法控制的站点发送带有身份验证 cookie 的请求。问题是 cookie 的值中有逗号(我使用 EditThisCookie 来获取 cookie 值)。
我得到这个异常:“部分 cookie 无效。”因为逗号应该是分隔符。
在这种情况下我该怎么办?我必须用逗号发送 cookie,但 .Net 给了我一个例外。
我需要它来忽略逗号。只需发送请求。
此外,我在 stackoverflow 和其他网站上看到了很多答案,说我应该使用 UrlEncode 但这只有在服务器解码 cookie 时才有效,但由于我无法控制服务器,所以这不会发生,正确的?无论如何,它对我不起作用。
代码:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url));
Cookie cookie = new Cookie();
cookie.HttpOnly = true;
cookie.Secure = true;
cookie.Name = "token";
cookie.Value = "65711831-97d3-41c9-a9dd-3fbc7a7a14fc,212823c191e8ea561b13e6d07a1dbf3a,uVKJHhoDBGPP/s96tmbuyTvCSw0HiaRykXGFmCL4YJnGaDz1E7fNFo/"; // This is a part of the value
CookieContainer cookies = new CookieContainer();
cookies.Add(new Uri("https://www.lynda.com/"), cookie);
request.CookieContainer = cookies;
request.AllowAutoRedirect = true;
request.KeepAlive = true;
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.8) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)";
【问题讨论】:
-
你尝试过 url 编码吗?成功了吗?
-
cookies 中不允许使用逗号。
-
没有 url 编码不起作用,因为我无法控制的网站不会对其进行解码,因此它的字面意思是 %2c 而不是“,”
-
我也知道逗号是不允许的,但是这个站点在它的身份验证 cookie 中使用它们并且它可以工作。这个网站也是一个受欢迎的网站。
-
docs.microsoft.com/en-us/dotnet/api/… -- "Cookie 的值不能为空。如果为该属性分配了空值,则将其替换为空字符串。分号和逗号是保留字符,不能用在这个属性的值中。给这个属性赋值无效字符不会抛出异常;但是当你尝试用Add方法将此Cookie添加到CookieContainer实例时,操作会失败并抛出异常。"跨度>
标签: c# cookies httpwebrequest