我正在尝试连接到一个使用 cookie 的网站。我的登录如下:
private void button1_Click(object sender, EventArgs e)
{
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(baseurl);
req.Referer = referer;
req.AllowAutoRedirect = true;
req.KeepAlive = true;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
byte[] postbuf = Encoding.ASCII.GetBytes(login);
req.ContentLength = postbuf.Length;
Stream rs = req.GetRequestStream();
rs.Write(postbuf, 0, postbuf.Length);
rs.Close();
cookie = req.CookieContainer = new CookieContainer();
WebResponse resp = req.GetResponse();
string s = "";
foreach (Cookie c in cookie.GetCookies(req.RequestUri))
{
s += ("Cookie['" + c.Name + "']: " + c.Value);
}
textBox1.Text = s;
resp.Close();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex);
}
}
cookie 有 2 个带值的键。然后我尝试向该网站发送一个帖子请求,如下所示:
private void button2_Click(object sender, EventArgs e)
{
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(search);
req.Referer = referer;
req.AllowAutoRedirect = true;
req.KeepAlive = true;
req.CookieContainer = cookie;
StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream());
if (reader != null)
{
string data = reader.ReadToEnd();
reader.Close();
textBox1.Text = data;
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex);
}
}
但是我得到一个错误,它无法验证。当我使用 firefox 登录时,我看到 cookie 包含更多条目。
我的代码有什么问题?
最佳答案
我认为您的错误在于以下行:
cookie = req.CookieContainer = new CookieContainer();
每次写入请求流后,您都在实例化一个新的 cookie 容器。
因为 cookie
是一个全局变量,它只初始化一次,例如在你写流之前说它声明和设置它的地方:
req.CookieContainer = cookie;
rs.Write(postbuf, 0, postbuf.Length);
关于c# - 检索和设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8533985/