получить и установить куки - PullRequest
2 голосов
/ 16 декабря 2011

Я пытаюсь подключиться к веб-сайту, который использует куки. Мой логин выглядит следующим образом:

        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);
        }
    }

У куки есть 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 содержит гораздо больше записей.

Что не так с моим кодом?

1 Ответ

1 голос
/ 16 декабря 2011

Я думаю, что ваша ошибка в следующей строке:

cookie = req.CookieContainer = new CookieContainer();

вы создаете новый контейнер cookie каждый раз после записи потока запросов.

Поскольку cookie является глобальной переменной, инициализируйте ее только один раз, например, где она объявлена, и установите ее перед записью потока:

req.CookieContainer = cookie;
rs.Write(postbuf, 0, postbuf.Length);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...