【发布时间】:2018-06-15 09:42:30
【问题描述】:
我一直在尝试登录服务器以获取身份验证 cookie(会话 cookie),然后我可以将其用于进一步调用服务器。我读过的每个例子都遵循相同的模式:
HttpWebRequest request = WebRequest.Create(loginURL) as HttpWebRequest;
var response = request.GetResponse() as HttpWebResponse;
var cookies = response.Cookies;
这对我不起作用,因为 cookies 变量最终为空,并且调试分析显示 response.Cookies 为空。服务器是我的,我可以通过调试看到正在设置cookie。如果我用它登录到我的网站,我也可以在 Firefox 中看到 cookie。所以我知道cookie正在被设置。
经过一番折腾,我发现 cookie 是在 request 中设置的,而不是在响应中。所以下面的代码有效。我的问题是:为什么?为什么请求被填充,而不是响应?这与成为帖子有关,而不是与获取有关吗?我完全感到困惑。
private void Login()
{
string userName = UserNameText.Text;
string password = PasswordText.Password;
string baseURL = URLText.Text;
string loginURL = baseURL + "/Authentication/LoginAction";
HttpWebRequest request = WebRequest.Create(loginURL) as HttpWebRequest;
request.Method = "POST";
string formContent =
"UserName=" + userName +
"&Password=" + password;
var byteArray = Encoding.UTF8.GetBytes(formContent);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.CookieContainer = new CookieContainer();
try
{
using (var dataStream = request.GetRequestStream())
{
dataStream.Write(byteArray, 0, byteArray.Length);
using (var response = request.GetResponse() as HttpWebResponse)
{
var cookies = request.CookieContainer;
if (cookies.Count != 0)
{
cookies_ = cookies;
}
}
}
}
catch(Exception ex)
{
// don't bother too much
Debug.WriteLine(ex.Message);
}
}
【问题讨论】: