【问题标题】:Not returning Set-Cookie parameter when using HttpWebResponse使用 HttpWebResponse 时不返回 Set-Cookie 参数
【发布时间】:2017-03-29 21:52:01
【问题描述】:

以下代码:

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。

【问题讨论】:

  • 如果 Cookies.Count == 0 那么你为什么期望 foreach 显示任何东西?
  • @DavidTansey 不应该是0,应该是1,就是csrf_token

标签: c# cookies httpwebrequest httpwebresponse


【解决方案1】:

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

使用以下代码行获取 cookie 标头。

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

这会给你带来类似的价值

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

【讨论】:

    猜你喜欢
    • 2014-10-05
    • 2017-04-06
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    • 1970-01-01
    • 2011-10-02
    相关资源
    最近更新 更多