Как получить трафик через C#

SlipDez

Client
Регистрация
18.07.2018
Сообщения
375
Благодарностей
70
Баллы
28
Видел на форуме много тем включая запись всего трафика в таблицу. Это действительно работает, но как только я хочу выцепить нужный запрос выдает просто пустоту. Возможно проблема в том, что неправильный тип переменных использую. Нужна помощь.

Код
C#:
// Получение dc токена
instance.UseTrafficMonitoring=true;//начинаем мониторить трафик
instance.ActiveTab.Navigate("https://discord.com/login"); // переходим на сайт
System.Threading.Thread.Sleep(3000); //пауза на всякий случай
if (instance.ActiveTab.IsBusy) instance.ActiveTab.WaitDownloading(); //если страница не прогрузилась ждем
var list = instance.ActiveTab.GetTraffic();//получаем трафик (пытался использовать с параметром clear : false но выдает когда пытался в цикле ждать запрос
//Компиляция кода  Ошибка в действии "CS1739" "The best overload for 'GetTraffic' does not have a parameter named 'clear'". [Строка: 5; Cтолбец: 49]
string ob = ""; //переменная
foreach(var t in list)//перебор трафика
    if(t.RequestHeaders != null) //если запрос не пустой
        if(t.Url.ToString().Contains("api/v9/science") == true) //берем запрос если содержит api/v9/science
            ob = t.RequestHeaders.ToString(); //конвертация в строку
        project.Variables["res"].Value = ob;//в переменную
 
  • Спасибо
Реакции: Phoenix78

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
Видел на форуме много тем включая запись всего трафика в таблицу. Это действительно работает, но как только я хочу выцепить нужный запрос выдает просто пустоту. Возможно проблема в том, что неправильный тип переменных использую. Нужна помощь.

Код
C#:
// Получение dc токена
instance.UseTrafficMonitoring=true;//начинаем мониторить трафик
instance.ActiveTab.Navigate("https://discord.com/login"); // переходим на сайт
System.Threading.Thread.Sleep(3000); //пауза на всякий случай
if (instance.ActiveTab.IsBusy) instance.ActiveTab.WaitDownloading(); //если страница не прогрузилась ждем
var list = instance.ActiveTab.GetTraffic();//получаем трафик (пытался использовать с параметром clear : false но выдает когда пытался в цикле ждать запрос
//Компиляция кода  Ошибка в действии "CS1739" "The best overload for 'GetTraffic' does not have a parameter named 'clear'". [Строка: 5; Cтолбец: 49]
string ob = ""; //переменная
foreach(var t in list)//перебор трафика
    if(t.RequestHeaders != null) //если запрос не пустой
        if(t.Url.ToString().Contains("api/v9/science") == true) //берем запрос если содержит api/v9/science
            ob = t.RequestHeaders.ToString(); //конвертация в строку
        project.Variables["res"].Value = ob;//в переменную
Привет. Вероятно, вы неправильно использовали область видимости.
В вашем условии: Если не найдена api/v9/science, то записать в project.Variables["res"].Value = ob
Так же желательно сделать return если true if(t.Url.Contains("api/v9/science")) , если вы ходите найти из запроса только один результат, иначе он будет перезаписывать значение в переменной ob и потом записывать только последний найденный.

C#:
// Получение dc токена
instance.UseTrafficMonitoring=true;//начинаем мониторить трафик
instance.ActiveTab.Navigate("https://discord.com/login"); // переходим на сайт
System.Threading.Thread.Sleep(3000); //пауза на всякий случай
if (instance.ActiveTab.IsBusy) instance.ActiveTab.WaitDownloading(); //если страница не прогрузилась ждем
var list = instance.ActiveTab.GetTraffic();//получаем трафик (пытался использовать с параметром clear : false но выдает когда пытался в цикле ждать запрос
//Компиляция кода  Ошибка в действии "CS1739" "The best overload for 'GetTraffic' does not have a parameter named 'clear'". [Строка: 5; Cтолбец: 49]
string ob = ""; //переменная
foreach(var t in list)//перебор трафика
{
    if (t.RequestHeaders == null) continue; //если запрос не пустой
    if(t.Url.Contains("api/v9/science")) //берем запрос если содержит api/v9/science
        ob = t.RequestHeaders; //конвертация в строку
}
project.Variables["res"].Value = ob;//в переменную
upd: Добавил объяснение.
 
Последнее редактирование:

SlipDez

Client
Регистрация
18.07.2018
Сообщения
375
Благодарностей
70
Баллы
28
@djaga все отлично отрабатывает,но если выполнять через 3-5с. как и другие кубики. Есть похожий вариант но не понимаю почему-то не работает

Можно поставить задержку перед выполнением и все будет нормально, но если страница дольше будет грузится все сломается(

Все дело в том что 1 раз отрабатывает и записывает пустоту а второй раз уже то, что надо

решил тупым способом
C#:
Thread.Sleep(500);

Tab tab = instance.ActiveTab;
if ((tab.IsVoid) || (tab.IsNull)) return -1;
if (tab.IsBusy) tab.WaitDownloading();
string token = project.Variables["res"].Value;
for (int a=0; a<3; a++){

if (token==""){
var traffic = instance.ActiveTab.GetTraffic();

foreach(var t in traffic) {
    if (t.Url=="https://discord.com/api/v9/science"&& t.Method=="POST" && t.RequestHeaders!="") {
        t.WaitResponse(30, 10); // Проверяем каждые 2 секунды в течение 60 сек.
        project.Variables["res"].Value= t.RequestHeaders.ToString();
        return "ok";
    }
}
}
else break;
}
не понимаю как работает метод WaitResponce может есть более простой способ ждать n секунд запроса?

UPD Да, вы правы но даже обновленный вариант не записывает значения с 1 раза, вижу решение только в цикле пробовать выполнить данный кусок кода 2-3 раза и добавлять определенную задержку. Видимо он собирает весь трафик в момент когда искомого запроса еще нет
 
Последнее редактирование:
  • Спасибо
Реакции: Sho

SlipDez

Client
Регистрация
18.07.2018
Сообщения
375
Благодарностей
70
Баллы
28
Может кому-то понадобится для получения токена Discord

C#:
instance.UseTrafficMonitoring = true;
Tab tab = instance.ActiveTab;
tab.Navigate("discord.com/login","");

if (tab.IsBusy) tab.WaitDownloading();
string token = project.Variables["res"].Value;
for (int a=0; a<30; a++){

if (token==""){
    System.Threading.Thread.Sleep(500);
var traffic = instance.ActiveTab.GetTraffic();

foreach(var t in traffic) {
    if (t.Url=="https://discord.com/api/v9/science"&& t.Method=="POST" && t.RequestHeaders!="") {
        t.WaitResponse(30, 10); // Проверяем каждые 2 секунды в течение 60 сек.
        project.Variables["res"].Value = Regex.Match(t.RequestHeaders,@"(?<=authorization:\ ).*").Value;
        return "ok";
    }
}
}
else {
break;
}

}
 
  • Спасибо
Реакции: newxomia

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
@djaga все отлично отрабатывает,но если выполнять через 3-5с. как и другие кубики. Есть похожий вариант но не понимаю почему-то не работает

Можно поставить задержку перед выполнением и все будет нормально, но если страница дольше будет грузится все сломается(

Все дело в том что 1 раз отрабатывает и записывает пустоту а второй раз уже то, что надо

решил тупым способом
C#:
Thread.Sleep(500);

Tab tab = instance.ActiveTab;
if ((tab.IsVoid) || (tab.IsNull)) return -1;
if (tab.IsBusy) tab.WaitDownloading();
string token = project.Variables["res"].Value;
for (int a=0; a<3; a++){

if (token==""){
var traffic = instance.ActiveTab.GetTraffic();

foreach(var t in traffic) {
    if (t.Url=="https://discord.com/api/v9/science"&& t.Method=="POST" && t.RequestHeaders!="") {
        t.WaitResponse(30, 10); // Проверяем каждые 2 секунды в течение 60 сек.
        project.Variables["res"].Value= t.RequestHeaders.ToString();
        return "ok";
    }
}
}
else break;
}
не понимаю как работает метод WaitResponce может есть более простой способ ждать n секунд запроса?

UPD Да, вы правы но даже обновленный вариант не записывает значения с 1 раза, вижу решение только в цикле пробовать выполнить данный кусок кода 2-3 раза и добавлять определенную задержку. Видимо он собирает весь трафик в момент когда искомого запроса еще нет
Если я правильно понял вас. То попробуйте так:

Идет поиск в течении 30сек, а потом выход с ошибкой.
C#:
Tab tab = instance.ActiveTab;
instance.UseTrafficMonitoring = true; // начинаем мониторить трафик
tab.Navigate("https://discord.com/login"); // переходим на сайт

if (tab.IsBusy)
    tab.WaitDownloading(); // если страница не прогрузилась ждем

List<TrafficItem> trafficItems = new List<TrafficItem>();
for (int i = 0; i < 30; i++)
{
    trafficItems.AddRange(tab.GetTraffic());
    foreach (var item in trafficItems
                 .Where(item => item.RequestHeaders != null)
                 .Where(item => item.Url.Contains("api/v9/science")))
        return item.RequestHeaders; // конвертация в строку

    Thread.Sleep(1000);
}
throw new Exception("Нужный запрос не найден");
Важно! Код не тестировал, написал на коленке. Если будут ошибки, пожалуйста, напишите.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 514
Благодарностей
3 368
Баллы
113
Давно есть шаблон-пример:
 

Вложения

  • Спасибо
Реакции: papa-rico, Sho и SlipDez

z@jivalo

Client
Регистрация
27.12.2016
Сообщения
800
Благодарностей
179
Баллы
43
Может кому-то пригодится мой шаблон Get TrafficItem не претендую на разработчика :D
суть такая, собираем трафик после старта сайта из браузера и можно извлечь в файл + получить данные JSON или не использовать кому как
 

Вложения

  • Спасибо
Реакции: udiman

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