Асинхронная передача GET/POST

workoles

Client
Регистрация
02.05.2015
Сообщения
276
Благодарностей
81
Баллы
28
Привет! Есть вопрос к знатокам и админам. Скажите, пожалуйста, можно ли в ZP отправить несколько GET/POST запросов одновременно и положить ответы в несколько переменных или список? Интересует реализация на C#.
 

etyipin

Client
Регистрация
15.12.2017
Сообщения
95
Благодарностей
35
Баллы
18

workoles

Client
Регистрация
02.05.2015
Сообщения
276
Благодарностей
81
Баллы
28
Да, это решение я уже изучил. Спасибо. Но по большей части интересуют POST запросы и в идеале при помощи стандартных методов ZP (чтобы была возможность менять UserAgent и добавлять пользовательские HTTP заголовки).
 

etyipin

Client
Регистрация
15.12.2017
Сообщения
95
Благодарностей
35
Баллы
18
  • Спасибо
Реакции: workoles

workoles

Client
Регистрация
02.05.2015
Сообщения
276
Благодарностей
81
Баллы
28
Возникла проблема при работе с асинхронным GET/POST. Опишу её суть на примере. Мне необходимо скачать 100 страниц с целевого сайта в асинхронном режиме. Но при этом это надо сделать так, чтобы необходимая информация с этих страниц сохранилась в список по порядку, т.е. сперва сохранилась информация со страницы 1, потом со страницы 2, потом 3... и т.д. Но при запуске парсинга в асинхронном режиме поток 90 может отработать раньше, чем поток 10. Соответственно данные с со страницы 90 лягут в список выше, чем со страницы 10 и получится каша. Пауза между потоками не решает задачи (проверил на практике), да и использование паузы — это плохое решение, т.к. пауза сводит на «нет» всё преимущество параллельного выполнения. Соответственно нужно нечто асинхронной очереди, чтобы запросы отправились последовательно, но результат обрабатывался одновременно.

P.S.
Или, быть может, есть аналог вот этой опции:



но для кубиков GET/POST запросов? Т.е. чтобы можно было было отправить несколько GET/POST запросов один за другим без ожидания ответа.
 
Последнее редактирование:

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
по ссылке, что давали выше в цикле есть индекс. ЧТо мешает сохранять последовательность за его счёт?
 

workoles

Client
Регистрация
02.05.2015
Сообщения
276
Благодарностей
81
Баллы
28
по ссылке, что давали выше в цикле есть индекс. ЧТо мешает сохранять последовательность за его счёт?
Изначально я так и реализовал, после чего и столкнулся с проблемой. Дело в том, что потоки в рамках данного цикла стартуют одновременно, но код выполняют с разной скоростью (в основном за счет разной скорости ответа удаленного сервера), поэтому к финишу они приходят в разное время даже если каждый индекс умножить на секундную паузу.. Конечно, чем дольше пауза, тем выше вероятность последовательного завершения, но тем дольше и общее время выполнения. Настолько дольше, что весь смысл параллельности теряется.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
не надо ничего умножать. Нужно создать массив с количеством элементов равному количеству ссылок и записывать в цикле ответы по индексу
 

workoles

Client
Регистрация
02.05.2015
Сообщения
276
Благодарностей
81
Баллы
28
не надо ничего умножать. Нужно создать массив с количеством элементов равному количеству ссылок и записывать в цикле ответы по индексу
Буду благодарен, если покажете на примере того кода, который дан по ссылке выше.
 

workoles

Client
Регистрация
02.05.2015
Сообщения
276
Благодарностей
81
Баллы
28
Буду благодарен, если покажете на примере того кода, который дан по ссылке выше.
Хотя в общем-то я смысл понял, предложение имеет место быть, но в данном случае все осложняется тем, что каждый запрос должен содержать параметр в виде порядкового номера обращения к серверу и нельзя допустить, чтобы сперва обращение было сделано к 90 странице, а затем к 10 (если вернуться к примеру), т.е. по факту сами запросы должны быть сделаны последовательно, но без задержки на ожидание ответа.
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Хотя в общем-то я смысл понял, предложение имеет место быть, но в данном случае все осложняется тем, что каждый запрос должен содержать параметр в виде порядкового номера обращения к серверу и нельзя допустить, чтобы сперва обращение было сделано к 90 странице, а затем к 10 (если вернуться к примеру), т.е. по факту сами запросы должны быть сделаны последовательно, но без задержки на ожидание ответа.
Такое сделать нереально в многопоточном режиме. Ты никогда не можешь сказать какой из списка потоков будет выбран процессором следующим. Но можно примерно одновременно начать отправлять запросы
 
  • Спасибо
Реакции: workoles

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Хотя в общем-то я смысл понял, предложение имеет место быть, но в данном случае все осложняется тем, что каждый запрос должен содержать параметр в виде порядкового номера обращения к серверу и нельзя допустить, чтобы сперва обращение было сделано к 90 странице, а затем к 10 (если вернуться к примеру), т.е. по факту сами запросы должны быть сделаны последовательно, но без задержки на ожидание ответа.
это в рекламный раздел)
 

workoles

Client
Регистрация
02.05.2015
Сообщения
276
Благодарностей
81
Баллы
28
Такое сделать нереально в многопоточном режиме. Ты никогда не можешь сказать какой из списка потоков будет выбран процессором следующим. Но можно примерно одновременно начать отправлять запросы
Понял. Жалко, конечно. Параллельность хорошая штука, но, видимо, не универсальна.
 

workoles

Client
Регистрация
02.05.2015
Сообщения
276
Благодарностей
81
Баллы
28
@nuaru Скажите, пожалуйста, есть ли возможность сделать аналогичную опцию:



но не для браузера, а непосредственно для кубиков GET/POST запросов? Т.е. чтобы можно было отправить несколько GET/POST запросов последовательно один за другим без ожидания ответа.
 

TeslaCo

Client
Регистрация
25.10.2016
Сообщения
62
Благодарностей
2
Баллы
8

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)