powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Отправка множества POST запросов
25 сообщений из 25, страница 1 из 1
Отправка множества POST запросов
    #38766250
DomenER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!


У меня есть проблема.

Мне нужно отправлять порядка 40 запросов с данными на веб ресурс!
При этом отправка запроса зависит от предыдущего, т.е. если сервер вернул ошибку, то необходимо остановить выполнение и отобразить текст ответа сервера.

При этом хотелось бы чтобы на форме в каком-нить label отображалось число запросов которые прошли и получили ответ.

Если делать в лоб, то запросы идут, ответы получаются, но где-то на 5-7 запросе подвисает интерфейс проги.

Пытаюсь делать через BackgroungWorker! С ним не видно, сколько выполнилось и выполнилось ли вообще! И в процессе формирования данных для POST запроса часть сведений берётся с формы, например, с TextBox. И BackgroungWorker у меня останавливается когда присваиваю какой-то переменной данные TextBox.Text!

Другой вариант - пытаюсь отправить POST запрос асинхронно! Тут возникает проблема, что отправляются сразу 40 запросов. И ответы на них приходят только со временем и это в программе уже не видно!

Код выложи вечером, т.к. с собой на руках нету.


Может примерчики подскажите какие можно посмотреть??
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38766280
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DomenERДругой вариант - пытаюсь отправить POST запрос асинхронно! Тут возникает проблема, что отправляются сразу 40 запросов.дык, не отправляй всё сразу.
в любом асинхронном запросе можно поймать момент, когда запрос завершится, позырить результат, использовав его для нового запроса.
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38766297
DomenER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечDomenERДругой вариант - пытаюсь отправить POST запрос асинхронно! Тут возникает проблема, что отправляются сразу 40 запросов.дык, не отправляй всё сразу.
в любом асинхронном запросе можно поймать момент, когда запрос завершится, позырить результат, использовав его для нового запроса.

Примерчик можно?

И всё дело в том, что асинхронную отправку запроса я сделал по одному примеру, а там 2 асинхронных процедуры по отправке и получению ответа с параметрами static void. А при таких параметрах я не могу забрать из процедуры результат ответа.
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38766822
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
DomenER,

Вы отправляете из формы или из веб-страницы?
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38766826
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
DomenERсделал по одному примеру
Пример покажите. Может найдем что переделать.
Навскидку - ответ можно писать в какую-то глобальную переменную и читать ее по таймеру
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38766827
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Cat2DomenER,

Вы отправляете из формы или из веб-страницы?
Извините, понял сам, что из формы. Бота для онлайн игрушки пишите?
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38767028
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DomenERЯростный Мечпропущено...
дык, не отправляй всё сразу.
в любом асинхронном запросе можно поймать момент, когда запрос завершится, позырить результат, использовав его для нового запроса.

Примерчик можно? Тут .
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38768681
DomenER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Cat2DomenER,

Вы отправляете из формы или из веб-страницы?
Извините, понял сам, что из формы. Бота для онлайн игрушки пишите?
Догадались! Да бота! ))
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38768693
DomenER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код такой:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
int g = 0;
                    for (int i = 0; i < 40; i++)
                    {
                    g++;
                        SendRequest("POST data", "http://www.site.com/page.php");
                        label_num.Text = g.ToString();
                        tb_gameslot.Text = ((int)Convert.ToInt32(tb_gameslot.Text) + 1).ToString();
                    }

private void SendRequest(string postData, string url)
        {

            HttpWebRequest wr = WebRequest.Create(url) as HttpWebRequest;
            wr.Method = "POST";
            wr.ContentType = "application/x-www-form-urlencoded";
            wr.UserAgent = "agent/10.0.2 CFNetwork/672.1.14 Darwin/14.0.0";
            wr.Accept = "*/*";
            
            wr.Proxy.Credentials = CredentialCache.DefaultCredentials;
wr.BeginGetRequestStream(new AsyncCallback(RequestCorrelationStart), wr);
        }

        private static void RequestCorrelationStart(IAsyncResult start_result)
        {
            HttpWebRequest start_request = start_result.AsyncState as HttpWebRequest;
            StreamWriter post_data_writer = new StreamWriter(start_request.EndGetRequestStream(start_result));
            post_data_writer.Write(_parameters);

            post_data_writer.Close();
            start_request.BeginGetResponse(new AsyncCallback(RequestCorrelationResponse), start_request);
        }

        private static void RequestCorrelationResponse(IAsyncResult response_result)
        {
            HttpWebRequest response_request = response_result.AsyncState as HttpWebRequest;
            HttpWebResponse response = response_request.EndGetResponse(response_result) as HttpWebResponse;
            // answer from getPostRequest.php
            StreamReader response_reader = new StreamReader(response.GetResponseStream());
            string response_string = response_reader.ReadToEnd();
        }
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38768703
DomenER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При таком коде отправляются сразу 40 запросов без проверки на получения ответа!
что не есть хорошо. Т.к. нам нужно отследить что прислал сервер и только потом отправлять следующий запрос!
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38768711
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лучше пакет запросов распараллелить, чтобы не ждать ответа. И в каждом параллельном коллбэке снимать ответ с сервера и складывать в общую потокобезопасную коллекцию.
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38768721
DomenER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruЛучше пакет запросов распараллелить, чтобы не ждать ответа. И в каждом параллельном коллбэке снимать ответ с сервера и складывать в общую потокобезопасную коллекцию.

Сервер прослеживает частоту обращений и иногда присылает сообщение, что надо охладить пыл обращений )))
Сколько он может пропускать запросов я пока не вычислил!
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38768807
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DomenER, какая задача решается? Не совсем понятно, зачем нужно в короткий промежуток времени отправлять столько запросов. DDoS бота пишешь? :)
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38768876
DomenER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruDomenER, какая задача решается? Не совсем понятно, зачем нужно в короткий промежуток времени отправлять столько запросов. DDoS бота пишешь? :)

DDoS бот тут непричём! надо просто отправить последовательно порядка 40 запросов и отслеживать ответы предыдущих чтобы остановить следующий запрос в случае чего.
И главное чтобы интерфейс не вис и отображал количество пройденных запросов. И если запрос вывел ошибку - то вывести ответ в какой-нить RichTextBox!
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38768891
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DomenERнадо просто отправить последовательно порядка 40 запросов и отслеживать ответы предыдущих чтобы остановить следующий запрос в случае чего.
Ты не ответил на мой вопрос. Мне его повторить?
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38768892
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DomenERнадо просто отправить
Все уже поняли, что надо. А вот зачем надо, не совсем понятно.
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38768902
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DomenERКод такой:убери цикл.
вместо него сделай один запрос.
каждый следующий делай в RequestCorrelationResponse.
при этом увеличивай i на 1.
когда i станет равно 40 - запрос не делай.
i можно сделать полем класса, чтобы методы его видели.
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38768941
DomenER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечDomenERКод такой:убери цикл.
вместо него сделай один запрос.
каждый следующий делай в RequestCorrelationResponse.
при этом увеличивай i на 1.
когда i станет равно 40 - запрос не делай.
i можно сделать полем класса, чтобы методы его видели.

Отправятся сразу 40 запросов без возможности отследить появление ошибки в ответе на запрос и вывода её на форму!
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38768943
DomenER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruDomenERнадо просто отправить
Все уже поняли, что надо. А вот зачем надо, не совсем понятно.

А как отследить порядка 40 последовательных операций?
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38768971
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DomenERА как отследить порядка 40 последовательных операций?
А почему не сделать один запрос, который вернет нужный пакет? Я и спрашиваю, что за задача. Опиши предметную область.
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38769028
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DomenER,

вот набросок - 5 страниц недавней темы на этом форуме:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
private void button1_Click(object sender, EventArgs e)
{
    int i = 0;

    WebClient wc = new WebClient();

    var func = (DownloadStringCompletedEventHandler)delegate(object se, DownloadStringCompletedEventArgs ea)
    {
        MessageBox.Show(ea.Result.Substring(9000, 350)); // обработка результата

        if(++i < 5) {
            // запуск следующего запроса
            wc.DownloadStringAsync(new Uri("http://www.sql.ru/forum/1117517-" + (i+1) + "/p"));
        }

    };

    wc.DownloadStringCompleted += func;
    wc.DownloadStringAsync(new Uri("http://www.sql.ru/forum/1117517/p"));
}



для POST запросов можешь использовать wc.UploadStringAsync.

в общем, WebClient рулит. Просто, удобно, функционально.
Заголовки запроса, куки всякие тоже можно добавить.
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38769129
DomenER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.ruDomenERА как отследить порядка 40 последовательных операций?
А почему не сделать один запрос, который вернет нужный пакет? Я и спрашиваю, что за задача. Опиши предметную область.

В общем в игре надо провести 40 атак!

1 запрос = 1 атака! Если пустить махом несколько штук сразу, то сервер первые 2 примет, потом 3-4 выдаёт ошибку, что слишком часто, потом ещё одну принимает, а дальше снова ошибка! А вообще по разному бывает. Не знаю как там отслеживается частота запросов!

Вот я и хочу пустить последовательно атаки. Если получу ошибку о том что слишком часто, то атаку думаю повторить сделав i-- в цикле!
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38769162
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DomenERЕсли пустить махом несколько штук сразу, то сервер первые 2 примет, потом 3-4 выдаёт ошибку
Ну так и разбирайся с сервером. Причем тут клиент? Какой-то эпический бред ты пишешь.
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38771501
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Яростный Меч
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
private void button1_Click(object sender, EventArgs e)
{
    int i = 0;

    WebClient wc = new WebClient();

    var func = (DownloadStringCompletedEventHandler)delegate(object se, DownloadStringCompletedEventArgs ea)
    {
        MessageBox.Show(ea.Result.Substring(9000, 350)); // обработка результата

        if(++i < 5) {
            // запуск следующего запроса
            wc.DownloadStringAsync(new Uri("http://www.sql.ru/forum/1117517-" + (i+1) + "/p"));
        }

    };

    wc.DownloadStringCompleted += func;
    wc.DownloadStringAsync(new Uri("http://www.sql.ru/forum/1117517/p"));
}


Зачем так сложно?

В одну строчку:

Код: c#
1.
ParallelEnumerable.Range(1, 5).ForAll(async (i) => MessageBox.Show(await new WebClient().DownloadStringTaskAsync("http://www.sql.ru/forum/1117517-" + (i + 1) + "/p")));
...
Рейтинг: 0 / 0
Отправка множества POST запросов
    #38771569
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, вот вот еще одно доказательство того, что не нужно использовать убогий WebClient, который не потокобезопасен.

Вот так работать не будет, если вынести WebClient в переменную.

Код: c#
1.
2.
var c = new WebClient();
ParallelEnumerable.Range(1, 5).ForAll(async (i) => MessageBox.Show(await c.DownloadStringTaskAsync("http://www.sql.ru/forum/1117517-" + i + "/p")));



Нужно в каждой итерации создавать новый экземпляр клиента, что реально накладно. Как в примере постом выше.

А вот HttpClient отлично справляется с задачей.

Код: c#
1.
2.
var h = new HttpClient();
ParallelEnumerable.Range(1, 5).ForAll(async (i) => MessageBox.Show(await h.GetStringAsync("http://www.sql.ru/forum/1117517-" + i + "/p")));
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Отправка множества POST запросов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]