Сеанс входа в систему не переносится на новую веб-страницу с помощью WebRequest / Response?

Хорошо, я слишком долго ломал голову над этим соло. Мне не удалось взломать его даже за часы, проведенные на этом и многих других сайтах.

По сути, я пытаюсь удалить некоторые данные с веб-страницы за страницей входа в систему с помощью WebRequest / Response. (Я добился того, чтобы это работало, используя элемент управления WebBrowser с некоторыми многоуровневыми событиями, которые переходят на разные веб-страницы, но это вызывает некоторые проблемы при попытке рефакторинга - не говоря уже о том, что было заявлено, что использование скрытой формы для выполнения работы это «плохая практика».)

Вот что у меня есть:

        string formParams = string.Format("j_username={0}&j_password={1}", userName, userPass);
        string cookieHeader;

        WebRequest request = WebRequest.Create(_signInPage);
        request.ContentType = "text/plain";
        request.Method = "POST";
        byte[] bytes = Encoding.ASCII.GetBytes(formParams);
        request.ContentLength = bytes.Length;
        using (Stream os = request.GetRequestStream())
        {
            os.Write(bytes, 0, bytes.Length);
        }
        WebResponse response = request.GetResponse();
        cookieHeader = response.Headers["Set-Cookie"];

        WebRequest getRequest = WebRequest.Create(sessionHistoryPage);
        getRequest.Method = "GET";
        getRequest.Headers.Add("Cookie", cookieHeader);
        WebResponse getResponse = getRequest.GetResponse();
        try
        {
            using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
            {
                textBox1.AppendText(sr.ReadToEnd());
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            throw;
        }

Пока что я могу перейти на нужную страницу по первой ссылке, но когда я перехожу ко второй, она отправляет меня обратно на страница входа в систему, как если бы я не входил в систему.

Проблема может заключаться в том, что файлы cookie не собираются правильно, но я новичок, так что, возможно, я просто делаю это неправильно. Он захватывает файлы cookie, отправленные обратно из POST: JSESSIONID и S2V, однако, когда мы переходим к «GET», используя FireFox WebConsole, браузер показывает, что он отправляет JSESSIONID, S2V и SPRING_SECURITY_REMEMBER_ME_COOKIE, что я считаю это файл cookie, который используется, когда я нажимаю поле «Запомнить меня» в форме входа в систему.

Я пробовал много разных способов сделать это, используя ресурсы SO, но мне еще предстоит добраться до нужной мне страницы.Итак, ради оставленных у меня волос я решил попросить помощи на хорошем оле SO. (Это одна из тех вещей, от которых я не хочу отказываться - иногда такая упрямая)

Если кому-то нужен реальный адрес сайта, на который я пытаюсь войти, я бы больше чем счастлив отправить его паре человек в личном сообщении.

Код, в котором я должен отразить предложенный ответ Уолла:

var request = (HttpWebRequest)WebRequest.Create(sessionHistoryPage);
request.Credentials = new NetworkCredential(userName, userPass);
request.CookieContainer = new CookieContainer();
request.PreAuthenticate = true;


WebResponse getResponse = request.GetResponse();
try
{
     using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
     {
          textBox1.AppendText(sr.ReadToEnd());
     }
}
catch (Exception ex)
{
     MessageBox.Show(ex.Message);
     throw;
}

Это предложение, по крайней мере, так, как я его реализовал, не сработало.

Как предложил Кризз, я изменил код, чтобы использовать CookieContainer и передавать файлы cookie из одного запроса в другой, однако ответ просто возвращает мне исходную страницу входа, как если бы я не входил в систему.

Существуют ли определенные сайты, на которых такое поведение ЗАПРЕЩАЕТСЯ?

Окончательное решение

Окончательное решение было предложено Адрианом Ифтоде, где он заявил, что веб-сайт, на который я пытаюсь войти , может не разрешать аутентификацию без действующего сеанса , поэтому добавление GET в начало процесса позволило мне получить этот файл cookie.

Спасибо за вашу помощь, ребята!

6
задан Josh 1 March 2012 в 02:26
поделиться