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

  • Автор темы Автор темы clickdd
  • Дата начала Дата начала

clickdd

Client
Регистрация
12.05.2021
Сообщения
5
Реакции
0
Баллы
1
Как найти последний выполненный GET-запрос(инициированный самим сайтом) с заранее известным url самого запроса , и полученный ответ положить в переменную проекта?
 
Как найти последний выполненный 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("Не нашел сайт");
 
Последнее редактирование:
Спасибо! это то что нужно. Подскажи ещё, включать мониторинг трафика в идеале перед загрузкой страницы, на которой инициируется запрос, верно?
 
Спасибо! это то что нужно. Подскажи ещё, включать мониторинг трафика в идеале перед загрузкой страницы, на которой инициируется запрос, верно?
Да. Запросы не сохраняются, если мониторинг выключен (по умолчанию он выключен).
Гипотетически, вы можете включить мониторинг после какого-то действия на сайте, а потом его выключить, а потом его снова включить. Чтобы не собирать мусорные запросы, когда вам это не нужно.
Так же надо учитывать, что каждый переход по гиперссылке или обновление страницы сбрасывает все запросы накопленные в zp (где-то), а список, в который вы сохраняете, хранится дольше (в зависимости от логики программы).
 
Привет. Как раз не давно отвечал на схожие вопросы.

Ответы по теме:
Ответ в теме: Как получить трафик через 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("Не нашел сайт");

Спасибо за ваш ответов и вклад


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

Вложения

Привет. Как раз не давно отвечал на схожие вопросы.

Ответы по теме:
Ответ в теме: Как получить трафик через 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
При включении мониторинга трафика возникает получается найти нужный запрос и обработать его. Но возникает другая проблема - оперативная память просто заканчивается что приводит к рестарту зенки... И речь не про 16 гб оперативки, а про 200гб... Которые заполняются за пару часов работы в 30 потоков

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

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

Если нужно слушать трафик, то используйте стандартный метод GetTraffic(), он после взятия очищает свой список.
Так же можно использовать политику для сайтов, добавляя определенные urlы в черный список (или наоборот).
 
Да. Данный пример кубика создал, чтобы не собирать в 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
Нашел вариант с очисткой оперативной памяти, которую "съел" инстанс. Нужно воспользоваться кубиком перезагрузки инстанса.

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

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

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