Привет. Как раз не давно отвечал на схожие вопросы.Как найти последний выполненный GET-запрос(инициированный самим сайтом) с заранее известным url самого запроса , и полученный ответ положить в переменную проекта?
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 потоковПривет. Как раз не давно отвечал на схожие вопросы.
Ответы по теме:
Ответ в теме: Как получить трафик через 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("Не нашел сайт");
Да. Данный пример кубика создал, чтобы не собирать в 10 минут и более все запросы со всего сайта.При включении мониторинга трафика возникает получается найти нужный запрос и обработать его. Но возникает другая проблема - оперативная память просто заканчивается что приводит к рестарту зенки... И речь не про 16 гб оперативки, а про 200гб... Которые заполняются за пару часов работы в 30 потоков
Выглядит все так что при включении мониторинга трафика он собирается, но не очищается вообще. Даже после того как инстанс закончил свою работу...
Возможно вы подскажете каким образом можно очищать собранный трафик после того как мы нашли и обработали нужный запрос ?
GetTraffic()
, он после взятия очищает свой список.Если пользуюсьДа. Данный пример кубика создал, чтобы не собирать в 10 минут и более все запросы со всего сайта.
Это нужно, чтобы точечно собрать нужную выборку используя фильтры и выйти из него.
Список будет очищен когда выполнение программы выйдет за приделы видимости метода(кубика).
Если нужно слушать трафик, то используйте стандартный методGetTraffic()
, он после взятия очищает свой список.
Так же можно использовать политику для сайтов, добавляя определенные urlы в черный список (или наоборот).
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic) {
if (t.Url==urlAll) {
return System.Text.Encoding.UTF8.GetString(t.ResponseBody);
}
}