c# - 检索和设置 cookie

标签 c# .net cookies

我正在尝试连接到一个使用 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/

相关文章:

python - 如何在 Python 中将 cookie 添加到现有的 cookielib CookieJar 实例?

c# - lambdas 构造函数是用于委托(delegate)类型的吗?

c# - .NET 编译器如何能够为 HashSet<T> 中的任何 T 构造 O(1) 查找?

.net - 如何从 ASP.NET 应用程序的 web.config 文件中读取设置值?

ruby-on-rails - 使用 ruby​​ mechanize 在浏览器中存储登录 session cookie

.htaccess - htaccess 从 www 到非 www,在 session /cookie 中引入变量

C# WebClient 返回损坏的非英语文本

c# - 获取无线网络强度

c# - 在 Settings.setting 文件中添加新设置

c# - Azure 表随机返回 null 值