ответ GET-запроса(инициированного скриптом сайта) в переменную

clickdd

Client
Регистрация
12.05.2021
Сообщения
5
Благодарностей
0
Баллы
1
Как найти последний выполненный GET-запрос(инициированный самим сайтом) с заранее известным url самого запроса , и полученный ответ положить в переменную проекта?
 

djaga

Client
Регистрация
26.04.2020
Сообщения
505
Благодарностей
1 050
Баллы
93
Как найти последний выполненный GET-запрос(инициированный самим сайтом) с заранее известным url самого запроса , и полученный ответ положить в переменную проекта?
Привет. Как раз не давно отвечал на схожие вопросы.

Ответы по теме:
Ответ в теме: Как получить трафик через C#
Ответ в теме: Отлов трафика + сбор всех кук в db

Логика:
В пункте 2, собирается список.
Далее его нужно перебрать с конца с поиском нужно нам сайта.
* Это не обязательно должен быть метод Contains, все зависит от ситуации.
* Перебрать можно разными способами, это самый наглядный.

Решение:
Получить последний запрос от искомого сайта:
Tab tab = instance.ActiveTab;
instance.UseTrafficMonitoring = true; // начинаем мониторинг трафика

/*Пример действия — переход на страницу*/
tab.Navigate("https://link.com"); // переходим на сайт
if (tab.IsBusy)
    tab.WaitDownloading(); // если страница не прогрузилась ждем

int stopRequestCount = 1; // меньше какого количества запросов на сайте считать что нужно остановиться.
/*бывает так, что сайт отправляет каждую секунду запрос для отслеживания действий на сайте, в таком случае такие запросы нужно блокировать*/

List<TrafficItem> trafficItems = new List<TrafficItem>();
for (int i = 0; i < 30; i++)
{
    List<TrafficItem> tempItems = tab.GetTraffic().ToList();
    if (tempItems.Count < stopRequestCount)
        break;

    trafficItems.AddRange(tempItems);
    Thread.Sleep(1000);
}

for (int i = trafficItems.Count - 1; i >= 0; i--)
{
    var item = trafficItems[i];
    if (!item.Url.Contains("Искомый сайт")) continue;

    /*Пример вывода самого последнего запроса от искомого сайта*/
    project.SendInfoToLog($"---\r\n" +
                          $"{item.Url}\r\n" +
                          $"{item.Time}\r\n" +
                          $"{item.RequestHeaders}\r\n" +
                          $"{item.RequestBody}\r\n" +
                          $"---");
    return item.Url;
}
throw new Exception("Не нашел сайт");
 
Последнее редактирование:

clickdd

Client
Регистрация
12.05.2021
Сообщения
5
Благодарностей
0
Баллы
1
Спасибо! это то что нужно. Подскажи ещё, включать мониторинг трафика в идеале перед загрузкой страницы, на которой инициируется запрос, верно?
 

djaga

Client
Регистрация
26.04.2020
Сообщения
505
Благодарностей
1 050
Баллы
93
Спасибо! это то что нужно. Подскажи ещё, включать мониторинг трафика в идеале перед загрузкой страницы, на которой инициируется запрос, верно?
Да. Запросы не сохраняются, если мониторинг выключен (по умолчанию он выключен).
Гипотетически, вы можете включить мониторинг после какого-то действия на сайте, а потом его выключить, а потом его снова включить. Чтобы не собирать мусорные запросы, когда вам это не нужно.
Так же надо учитывать, что каждый переход по гиперссылке или обновление страницы сбрасывает все запросы накопленные в zp (где-то), а список, в который вы сохраняете, хранится дольше (в зависимости от логики программы).
 

papa-rico

Client
Регистрация
15.11.2020
Сообщения
151
Благодарностей
8
Баллы
18
Привет. Как раз не давно отвечал на схожие вопросы.

Ответы по теме:
Ответ в теме: Как получить трафик через C#
Ответ в теме: Отлов трафика + сбор всех кук в db

Логика:
В пункте 2, собирается список.
Далее его нужно перебрать с конца с поиском нужно нам сайта.
* Это не обязательно должен быть метод Contains, все зависит от ситуации.
* Перебрать можно разными способами, это самый наглядный.

Решение:
Получить последний запрос от искомого сайта:
Tab tab = instance.ActiveTab;
instance.UseTrafficMonitoring = true; // начинаем мониторинг трафика

/*Пример действия — переход на страницу*/
tab.Navigate("https://link.com"); // переходим на сайт
if (tab.IsBusy)
    tab.WaitDownloading(); // если страница не прогрузилась ждем

int stopRequestCount = 1; // меньше какого количества запросов на сайте считать что нужно остановиться.
/*бывает так, что сайт отправляет каждую секунду запрос для отслеживания действий на сайте, в таком случае такие запросы нужно блокировать*/

List<TrafficItem> trafficItems = new List<TrafficItem>();
for (int i = 0; i < 30; i++)
{
    List<TrafficItem> tempItems = tab.GetTraffic().ToList();
    if (tempItems.Count < stopRequestCount)
        break;

    trafficItems.AddRange(tempItems);
    Thread.Sleep(1000);
}

for (int i = trafficItems.Count - 1; i >= 0; i--)
{
    var item = trafficItems[i];
    if (!item.Url.Contains("Искомый сайт")) continue;

    /*Пример вывода самого последнего запроса от искомого сайта*/
    project.SendInfoToLog($"---\r\n" +
                          $"{item.Url}\r\n" +
                          $"{item.Time}\r\n" +
                          $"{item.RequestHeaders}\r\n" +
                          $"{item.RequestBody}\r\n" +
                          $"---");
    return item.Url;
}
throw new Exception("Не нашел сайт");
Спасибо за ваш ответов и вклад


попробовал не сработало выдаёт ошибки прикрепил проект можете глянуть пожалуйста
 

Вложения

Deisler

Client
Регистрация
26.10.2019
Сообщения
481
Благодарностей
182
Баллы
43
Привет. Как раз не давно отвечал на схожие вопросы.

Ответы по теме:
Ответ в теме: Как получить трафик через C#
Ответ в теме: Отлов трафика + сбор всех кук в db

Логика:
В пункте 2, собирается список.
Далее его нужно перебрать с конца с поиском нужно нам сайта.
* Это не обязательно должен быть метод Contains, все зависит от ситуации.
* Перебрать можно разными способами, это самый наглядный.

Решение:
Получить последний запрос от искомого сайта:
Tab tab = instance.ActiveTab;
instance.UseTrafficMonitoring = true; // начинаем мониторинг трафика

/*Пример действия — переход на страницу*/
tab.Navigate("https://link.com"); // переходим на сайт
if (tab.IsBusy)
    tab.WaitDownloading(); // если страница не прогрузилась ждем

int stopRequestCount = 1; // меньше какого количества запросов на сайте считать что нужно остановиться.
/*бывает так, что сайт отправляет каждую секунду запрос для отслеживания действий на сайте, в таком случае такие запросы нужно блокировать*/

List<TrafficItem> trafficItems = new List<TrafficItem>();
for (int i = 0; i < 30; i++)
{
    List<TrafficItem> tempItems = tab.GetTraffic().ToList();
    if (tempItems.Count < stopRequestCount)
        break;

    trafficItems.AddRange(tempItems);
    Thread.Sleep(1000);
}

for (int i = trafficItems.Count - 1; i >= 0; i--)
{
    var item = trafficItems[i];
    if (!item.Url.Contains("Искомый сайт")) continue;

    /*Пример вывода самого последнего запроса от искомого сайта*/
    project.SendInfoToLog($"---\r\n" +
                          $"{item.Url}\r\n" +
                          $"{item.Time}\r\n" +
                          $"{item.RequestHeaders}\r\n" +
                          $"{item.RequestBody}\r\n" +
                          $"---");
    return item.Url;
}
throw new Exception("Не нашел сайт");
При включении мониторинга трафика возникает получается найти нужный запрос и обработать его. Но возникает другая проблема - оперативная память просто заканчивается что приводит к рестарту зенки... И речь не про 16 гб оперативки, а про 200гб... Которые заполняются за пару часов работы в 30 потоков

Выглядит все так что при включении мониторинга трафика он собирается, но не очищается вообще. Даже после того как инстанс закончил свою работу...

Возможно вы подскажете каким образом можно очищать собранный трафик после того как мы нашли и обработали нужный запрос ?
 
Последнее редактирование:
  • Спасибо
Реакции: papa-rico

djaga

Client
Регистрация
26.04.2020
Сообщения
505
Благодарностей
1 050
Баллы
93
При включении мониторинга трафика возникает получается найти нужный запрос и обработать его. Но возникает другая проблема - оперативная память просто заканчивается что приводит к рестарту зенки... И речь не про 16 гб оперативки, а про 200гб... Которые заполняются за пару часов работы в 30 потоков

Выглядит все так что при включении мониторинга трафика он собирается, но не очищается вообще. Даже после того как инстанс закончил свою работу...

Возможно вы подскажете каким образом можно очищать собранный трафик после того как мы нашли и обработали нужный запрос ?
Да. Данный пример кубика создал, чтобы не собирать в 10 минут и более все запросы со всего сайта.
Это нужно, чтобы точечно собрать нужную выборку используя фильтры и выйти из него.
Список будет очищен когда выполнение программы выйдет за приделы видимости метода(кубика).

Если нужно слушать трафик, то используйте стандартный метод GetTraffic(), он после взятия очищает свой список.
Так же можно использовать политику для сайтов, добавляя определенные urlы в черный список (или наоборот).
 

Deisler

Client
Регистрация
26.10.2019
Сообщения
481
Благодарностей
182
Баллы
43
Да. Данный пример кубика создал, чтобы не собирать в 10 минут и более все запросы со всего сайта.
Это нужно, чтобы точечно собрать нужную выборку используя фильтры и выйти из него.
Список будет очищен когда выполнение программы выйдет за приделы видимости метода(кубика).

Если нужно слушать трафик, то используйте стандартный метод GetTraffic(), он после взятия очищает свой список.
Так же можно использовать политику для сайтов, добавляя определенные urlы в черный список (или наоборот).
Если пользуюсь
C#:
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic) {
    if (t.Url==urlAll) {
        return System.Text.Encoding.UTF8.GetString(t.ResponseBody);
    }
}
то проблема точно такая же...

Способа принудительно очищать полученный трафик нету ?
 
  • Спасибо
Реакции: Sho и papa-rico

Deisler

Client
Регистрация
26.10.2019
Сообщения
481
Благодарностей
182
Баллы
43
Нашел вариант с очисткой оперативной памяти, которую "съел" инстанс. Нужно воспользоваться кубиком перезагрузки инстанса.

При работе с вышеописанным кодом и большим потреблением памяти одним инстансом я перезагружаю инстанс спустя 30 итераций.

Вполне возможно что в вашем случае проще просто завершить работу потока и запустить новый. В моем случае что бы не перезагружать мобильные прокси и не проходить по новой капчу на нужном сайте выгоднее именно перезагружать инстанс
 
  • Спасибо
Реакции: papa-rico

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