Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2013, 14:19   #1
qwq
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 96
По умолчанию Отработать повторно С#

Здравствуйте. В общем структура программы такая

кнопка1()
{
действия;
}

процедура()
{
получение капчи;
}


кнопка2()
{
действия; //отправка капчи
если результат не 302)
{
процедура();
}

код дальше...
}


Значит я авторизуюсь, получаю капчу, отправляю ее, если введена неверно вызываю процедуру, а вот как мне по новой отработать кнопку2, без нее никак, по ее нажатию происходит отправка капчи на сервер
qwq вне форума Ответить с цитированием
Старый 05.02.2013, 14:25   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цикл do-while?.. Не очень понятна проблема.
Abstraction вне форума Ответить с цитированием
Старый 05.02.2013, 17:56   #3
qwq
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 96
По умолчанию

Цитата:
Цикл do-while?.. Не очень понятна проблема.
такой вариант не проходит(((

в первой кнопке я получаю капчу и ввожу результат в текстбокс. Во второй я отправляю капчу на сервет. Пытаюсь сделать проверку правильности капчи, но не выходит
Код:
private void button2_Click(object sender, EventArgs e)
        {
            #region Отправка uh.ru/login передача login pass капча
            do
            {
                HttpWebRequest webreq = (HttpWebRequest)HttpWebRequest.Create("сайт");
                webreq.Method = "POST";
                webreq.AllowAutoRedirect = true;
                webreq.CookieContainer = new CookieContainer();
                webreq.CookieContainer = next_cc;
                webreq.ServicePoint.Expect100Continue = false;
                webreq.ContentType = "application/x-www-form-urlencoded";
                byte[] query = System.Text.Encoding.GetEncoding("UTF-8").GetBytes("keystring=" + textBox3.Text + "&login=" + textBox1.Text + "&password=" + textBox2.Text + "&enter=%d0%9e%d1%82%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d1%82%d1%8c");
                webreq.ContentLength = query.Length;
                webreq.GetRequestStream().Write(query, 0, query.Length);
                HttpWebResponse webresp = (HttpWebResponse)webreq.GetResponse();
                if (webresp.StatusCode == HttpStatusCode.Found) //Found = 302, если капча неверная, то выдает 200
                {
                    rez = 1; //Если 302 то все норм, идем дальше
                }
            } while (rez == 1);
            if (rez == 0)
            {
                kapcha(); // иначе получаем новую капчу
            }
            #endregion
            //получается так, что  условие do while показывает false, дальше идет условие if, оно отрабатывает получаю новую капчу и программа с условия if продолжает выполнять код. А как мне попасть в начало кода кнопки 2???

            pictureBox1.Visible = false;
            textBox3.Visible = false;
            button2.Visible = false;
            textBox4.Visible = true;            

        }
qwq вне форума Ответить с цитированием
Старый 05.02.2013, 19:54   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

А ничего, что смысла "вернуться к началу кода" нет никакого ибо данные в текстбоксах не поменяли и Вы опять будете один и тот же запрос слать и обламываться ?
Предложу Вам выделить код запроса в метод, принимающий несколько строк - параметров запроса, сделать массив таких параметров запроса и уже по кнопке циклом передавать в метод каждый набор параметров, а метод пусть возвращает true при успехе - тогда и дальше работайте.
Только на больших массивах тормозить будет безбожно, HttpWebRequest вроде не асинхронный же, да ещё и кикнуть могут за частые запросы ))
phomm вне форума Ответить с цитированием
Старый 05.02.2013, 21:11   #5
qwq
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 96
По умолчанию

Цитата:
Предложу Вам выделить код запроса в метод
Я потом тоже подумал о таком решении, завтра отпишусь.
qwq вне форума Ответить с цитированием
Старый 06.02.2013, 10:42   #6
qwq
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 96
По умолчанию

Цитата:
Сообщение от qwq Посмотреть сообщение
Я потом тоже подумал о таком решении, завтра отпишусь.
Так тоже не проходит.
Может можно по новой отрабатывать кнопку2, как при первом запуске?
qwq вне форума Ответить с цитированием
Старый 06.02.2013, 11:01   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Можете всё-таки чуть понятнее написать, чего Вы хотите получить? Детали не важны - напишите алгоритм, псевдокод, блок-схему... неважно что, лишь бы получилось строго, а не "надо отработать кнопку2".
Abstraction вне форума Ответить с цитированием
Старый 06.02.2013, 13:06   #8
qwq
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 96
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Можете всё-таки чуть понятнее написать, чего Вы хотите получить? Детали не важны - напишите алгоритм, псевдокод, блок-схему... неважно что, лишь бы получилось строго, а не "надо отработать кнопку2".
Вот понятнее
Код:
private void button1_Click(object sender, EventArgs e)
        {
            Ввожу логин и пароль. Отправляю на сервер. В ответ приходит капча

            textBox1.Visible = false;
            textBox2.Visible = false;
            button1.Visible = false;
            label1.Visible = false;                                            Убрать ненужные элементы и показать нужные
            label2.Visible = false;
            pictureBox1.Visible = true;
            textBox3.Visible = true;
            button2.Visible = true;
            textBox3.Focus();


            kapcha(); Вызываю процедуру получения капчи

        }


private void button2_Click(object sender, EventArgs e)
        {
            do
            {
                Ввожу в текстбокс капчу и нажимаю на  button2
                Отправляю капчу на сервер. Дальше хочу сделать проверку, если все хорошо (код 302) то работать дальше, если нет получаю новую капчу и ввожу по новой.


                if (webresp.StatusCode == HttpStatusCode.Found) //Если 302
                {
                    rez = 1;// переменная для проверки, хорошо или не хорошо
                }            

                if (rez == 0)// если не хорошо новая капча
                {

                    kapcha();
                }
            } while (rez == 0); // тут программа зацикливается, получает новую капчу но не останавливается для ее ввода.

            pictureBox1.Visible = false;
            textBox3.Visible = false;
            button2.Visible = false;
            textBox4.Visible = true;           

        }
qwq вне форума Ответить с цитированием
Старый 06.02.2013, 13:19   #9
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

1) Кто и когда устанавливает rez в 0?
2)
Код:
HttpWebResponse webresp = SendKapcha();
if(!RightKapchaResponse(webresp)) {
  CallUserAFool();
  GetNewKapcha();
  return; //Если правильно понимаю, всё, обработчик закончил работу.
  //Дальше пусть пользователь думает. 
}

SetElementsVisibilityForKapchaSolved();
Abstraction вне форума Ответить с цитированием
Старый 06.02.2013, 13:21   #10
qwq
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 96
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
1) Кто и когда устанавливает rez в 0?
rez в 0 изначально
qwq вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрет запуска приложения повторно grim225 C# (си шарп) 2 02.01.2013 11:52
Цикл. Не отправляются повторно запросы. Зод Работа с сетью в Delphi 4 17.02.2012 23:30
Задача о напечатании повторно рандомных символов XanderXage Помощь студентам 2 12.10.2011 20:18
как повторно вызвать процедуру? iiunbreakableii Общие вопросы Delphi 8 24.06.2010 13:32