Решено GetTraffic - не очищать трафик после вызова.

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 307
Благодарностей
865
Баллы
113
Добавьте возможность получать трафик без очистки.
Пример:
Клацнул я по кнопке, необходимо из трафика получить результат запроса. Проблема в том, что ответ может прийти и сразу и через минуту.
Если я вызову GetTraffic до того как пришел ответ, я ничего не получу и второй раз я уже не смогу проверить ответ.
Поэтому получается что: Клацаю по кнопке - пауза с запасом(а кто знает сколько ждать нужно?) - вызываю GetTraffic в надежде что ответ уже пришел. Если ответ не пришел, результат я уже никак не узнаю.
На мой взгляд, это необходимая опция. Можно конечно костылить и перед каждым вызовом ждать минутку, но это же капец оптимизации. Вариант с ожиданием загрузки страницы включая запросы тоже не подходит, различные скрипты постоянно шлют запросы.
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 307
Благодарностей
865
Баллы
113
Не понимаю что это даст. Пример задачи:
Эмитируем медленную проксю через 3proxy
proxy -p4443 -i127.0.0.1 -e192.168.0.105
bandlimin 1000 *
Идем на https://lessons.zennolab.com/ru/registration
После нажатия на "создать аккаунт" улетает post запрос на https://lessons.zennolab.com/ru/reg
При такой скорости прокси ответ идет около 12 секунд
87344

При возможности не очищать после получения, это элементарно сделать вот так:
C#:
// Проверяем трафик каждую секунду в течении ~60 секунд
for(int i = 0; i < 60; i++)
{
    //К примеру очистку можно отключить "clear: false"
    var traffic = instance.ActiveTab.GetTraffic(clear: false);
  
    foreach(var t in traffic)
    {
        if (t.Url=="https://lessons.zennolab.com/ru/reg/")
        {
            // Выводим тело запроса
            project.SendInfoToLog(System.Text.Encoding.UTF8.GetString(t.ResponseBody));
        }
    }
    Thread.Sleep(1000);
}
Ожидаемым результатом будет вывод каждую секунду пустого лога(пока запрос не загрузился и тела нет). После загрузки будет выводить тело.
Не понимаю как контекст поможет понять что ответ получен\загружен?
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Изначально неправильно понял Вашу задачу, извиняюсь.
Для этого есть решение - метод WaitResponse(). Он обновляет TrafficItem до тех пор, пока не будет получен ответ или ошибка.

C#:
Thread.Sleep(500);

Tab tab = instance.ActiveTab;
if ((tab.IsVoid) || (tab.IsNull)) return -1;
if (tab.IsBusy) tab.WaitDownloading();

var traffic = instance.ActiveTab.GetTraffic();

foreach(var t in traffic) {
    if (t.Url=="https://lessons.zennolab.com/ru/reg/") {
        t.WaitResponse(60, 2); // Проверяем каждые 2 секунды в течение 60 сек.
        return System.Text.Encoding.UTF8.GetString(t.ResponseBody);
    }
}
return null;
 

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63
Изначально неправильно понял Вашу задачу, извиняюсь.
Для этого есть решение - метод WaitResponse(). Он обновляет TrafficItem до тех пор, пока не будет получен ответ или ошибка.

C#:
Thread.Sleep(500);

Tab tab = instance.ActiveTab;
if ((tab.IsVoid) || (tab.IsNull)) return -1;
if (tab.IsBusy) tab.WaitDownloading();

var traffic = instance.ActiveTab.GetTraffic();

foreach(var t in traffic) {
    if (t.Url=="https://lessons.zennolab.com/ru/reg/") {
        t.WaitResponse(60, 2); // Проверяем каждые 2 секунды в течение 60 сек.
        return System.Text.Encoding.UTF8.GetString(t.ResponseBody);
    }
}
return null;
Подскажите пж из знающих как пофиксить?
Screenshot_161.png
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113

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