WebRequest 不发送由 CookieCollection 制成的传递 CookieContianer

问题描述

我做了一个服务器来监听 POST 请求的端口。 它处理一个 JSON 并反序列化为一个包含一些字符串和一个 CookieCollection 的类

那里都正确,但是当我将 CookieCollection 传递给 CookieContainer 并在请求中使用该容器时,它发送的请求没有 cookie。

Json 示例:

"loginContainer":[
  {
     "Comment":"","CommentUri":null,"HttpOnly":true,"discard":false,"Domain":"removed","Expired":false,"Expires":"2026-07-02T12:42:43+02:00","Name":"locale","Path":"/","Port":"","Secure":false,"TimeStamp":"2021-07-03T12:42:14.8645637+02:00","Value":"removed","Version":0
  }

收集到 CookieContainer:

CookieContainer loginContainer = new CookieContainer();

foreach (Cookie cookie in root.LoginContainer)
{
     Console.WriteLine(cookie.Name + " " + cookie.Value);
     loginContainer.Add(cookie);
}

请求:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

request.CookieContainer = loginContainer;

using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
using (MemoryStream ms = new MemoryStream())
{
     response.GetResponseStream().copyTo(ms);
     listLabels.Add(ms.ToArray(),labels.Phrase);
}

解决方法

通过循环 CookieCollection 并在 CookieContainer 中插入一个带有 CookieCollection 值的新 Cookie 来解决它,而不是来自 CookieCollection 的值。

foreach (Cookie cookie in root.LoginContainer)
{
    loginContainer.Add(new Cookie() { Name = cookie.Name,Value = cookie.Value,Path = cookie.Path,Domain = cookie.Domain });
}