使用 HttpWebResponse 时不返回 Set-Cookie 参数

Not returning Set-Cookie parameter when using HttpWebResponse

以下代码:

string url = "https://accounts.spotify.com/en/login";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.CookieContainer = new CookieContainer();
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
    string source = sr.ReadToEnd();
    MessageBox.Show(source);
    MessageBox.Show(resp.Cookies.Count.ToString());

    foreach (Cookie cookie in resp.Cookies)
    {
        MessageBox.Show(cookie.Name, cookie.Value);
    }
}

旨在为每个带有名称和值的 cookie 制作一个消息框。

但事实并非如此!没有返回一个值。

而是执行以下操作:

显示来源、Cookie 数量(显示 0),然后仅在加载表单前的短短 1-2 秒内显示其他内容。

它应该以 csrf_token=<...>

响应

如您所见,即使在 Fiddler 响应中您也可以看到 cookie。

我不确定为什么 resp.Cookies 里面没有任何 cookie。但是,如果您观察到 resp.Headers 有一个值 Set-Cookie。您可以使用它来检索响应中的 cookie。

使用以下代码行获取 cookie header。

var cookieHeader = resp.Headers["Set-Cookie"];

这会给你价值

csrf_token={sometokenvalue};Version=1;Domain=accounts.spotify.com;Path=/;Secure