使用 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
以下代码:
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