Ответ из трафика в переменную

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
а почему только с первого запроса ответ сохряняется в переменную? у меня их около 20 получается при загрузке одного урл
потому что.... фиг знает почему.... 100500 причин. например потому что переменная одна и выход по ретурну стоит? это я в хрустальный шар подглядел за чужим кодом :ca:
 

serg1208

Client
Регистрация
17.04.2018
Сообщения
331
Благодарностей
15
Баллы
18
потому что.... фиг знает почему.... 100500 причин. например потому что переменная одна и выход по ретурну стоит? это я в хрустальный шар подглядел за чужим кодом :ca:
для Вас шутка, а для меня темный лес(
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

serg1208

Client
Регистрация
17.04.2018
Сообщения
331
Благодарностей
15
Баллы
18

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
а почему только с первого запроса ответ сохряняется в переменную? у меня их около 20 получается при загрузке одного урл
В коде стоит возврат значения (return) при первом успешном нахождении.
 
  • Спасибо
Реакции: serg1208

serg1208

Client
Регистрация
17.04.2018
Сообщения
331
Благодарностей
15
Баллы
18
В коде стоит возврат значения (return) при первом успешном нахождении.
подскажите, как сделать чтобы они сумировалиссь в одну переменную ? все ответы из запросов. Спасибо
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
80351


ну убрать return System.Text.Encoding.UTF8.GetString(t.ResponseBody);
в самом начале завести локалку var temp = "";
вместо ретурна temp = temp + System.Text.Encoding.UTF8.GetString(t.ResponseBody);
вместо return "Ничего не нашли"; поставить return temp ;
 
  • Спасибо
Реакции: serg1208

serg1208

Client
Регистрация
17.04.2018
Сообщения
331
Благодарностей
15
Баллы
18
Посмотреть вложение 80351

ну убрать return System.Text.Encoding.UTF8.GetString(t.ResponseBody);
в самом начале завести локалку var temp = "";
вместо ретурна temp = temp + System.Text.Encoding.UTF8.GetString(t.ResponseBody);
вместо return "Ничего не нашли"; поставить return temp ;
1626958212256.png

Сделал, но отдает то же кол-во строк (с первого запроса)
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
надо --> temp = temp + System.Text.Encoding.UTF8.GetString(t.ResponseBody);

а не --> return temp = temp + System.Text.Encoding.UTF8.GetString(t.ResponseBody);
 
  • Спасибо
Реакции: serg1208

sergey amitel

Client
Регистрация
12.11.2021
Сообщения
11
Благодарностей
1
Баллы
3
Видимо невнимательно следовали инструкциям, что я оставил в прошлом сообщении.
Здравствуйте. Сейчас разбираюсь с тем, чтобы получить headers страницы. Но есть проблемы - не на всех сайтах могу получить полный список URL. Взял ваш пример из вложения, выполнил - все ок.
Заменяю на другой домен, который не все URL отдает, например на http://vrn.best-city.ru/ или http://interesnoe.info/ - ничего не получаю, даже если потом запускаю с URL https://zennolab.com/ru/ и выполняю с ним - пустой ответ пока не перезапущу весь проект сначала.

Такое впечатление, что зенопостер ловит глюк в ответе от этих сайтов.
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Здравствуйте. Сейчас разбираюсь с тем, чтобы получить headers страницы. Но есть проблемы - не на всех сайтах могу получить полный список URL. Взял ваш пример из вложения, выполнил - все ок.
Заменяю на другой домен, который не все URL отдает, например на http://vrn.best-city.ru/ или http://interesnoe.info/ - ничего не получаю, даже если потом запускаю с URL https://zennolab.com/ru/ и выполняю с ним - пустой ответ пока не перезапущу весь проект сначала.

Такое впечатление, что зенопостер ловит глюк в ответе от этих сайтов.
Да, есть такая проблема. Перенесли Вашу тему в багтрекер.
 
Регистрация
27.08.2018
Сообщения
29
Благодарностей
3
Баллы
3
Вставляете C# экшен с кодом в место, откуда требуется начать запись запросов, например в самое начало:
C#:
instance.UseTrafficMonitoring = true;
Совершаете переходы по нужным страницам, а далее запускаете сбор данных из трафика:
C#:
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic) {
    if (t.Url=="https://zennolab.com/ru/") {
        return System.Text.Encoding.UTF8.GetString(t.ResponseBody);
    }
}
return "Ничего не нашли";
Вместо https://zennolab.com/ru/ указываем полный URL, содержимое которого Вы хотите получить.
Добрый день,интересно как можно взять POST запрос вместо GET

Благодарю
 

Markoonij

Client
Регистрация
13.10.2020
Сообщения
70
Благодарностей
3
Баллы
8
Всем привет!
В PM все четко работает, а в ZP выдает ошибку:

Выполнение действия CSharp OwnCode: RequestBody. Массив не может быть неопределенным.
Имя параметра: bytes


В чем может быть дело?
 

Markoonij

Client
Регистрация
13.10.2020
Сообщения
70
Благодарностей
3
Баллы
8
Вставляете C# экшен с кодом в место, откуда требуется начать запись запросов, например в самое начало:
C#:
instance.UseTrafficMonitoring = true;
Совершаете переходы по нужным страницам, а далее запускаете сбор данных из трафика:
C#:
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic) {
    if (t.Url=="https://zennolab.com/ru/") {
        return System.Text.Encoding.UTF8.GetString(t.ResponseBody);
    }
}
return "Ничего не нашли";
Вместо https://zennolab.com/ru/ указываем полный URL, содержимое которого Вы хотите получить.
Как можно сразу получить в переменную ResponseBody + RequestBody ?
Пробую вот так:
C#:
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic) {
    if (t.Url=="https://zennolab.com/ru/") {
        return System.Text.Encoding.UTF8.GetString(t.ResponseBody) + t.RequestBody;
    }
}

return "Ничего не нашли";
В PM все работает, в ZP не хочет
 
Последнее редактирование:
  • Спасибо
Реакции: Roman1992

MaxLucky

Client
Регистрация
13.08.2017
Сообщения
186
Благодарностей
14
Баллы
18
Добрый день. Задача получить POST запрос. URL не меняется. Необходимо в переменную получить значения из "Параметры". А так же из "Заголовки". Подскажите пожалуйста какой код получится в таком случае.
 

Вложения

  • 12 КБ Просмотры: 85

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
737
Благодарностей
485
Баллы
63
Добрый день. Задача получить POST запрос. URL не меняется. Необходимо в переменную получить значения из "Параметры". А так же из "Заголовки". Подскажите пожалуйста какой код получится в таком случае.
Что-то типа такого
C#:
var traffic = instance.ActiveTab.GetTraffic();
foreach (var t in traffic)
{
    if (t.Url == "https://zennolab.com/ru/") //Как будем искать нужный запрос
    {
        var body = t.RequestBody; //Параметры
        var headers = t.RequestHeaders; //Заголовки
    }
}
 

dextermerxter

Client
Регистрация
01.09.2016
Сообщения
3
Благодарностей
11
Баллы
3
Я пробовал другие варианты с форума и они не работали для получения ответа POST запроса.
Составил такой код который выполнял эту задачу...

C#:
var traffic = instance.ActiveTab.GetTraffic();
string desiredUrl = "https://zennolab.com/";
string postData = string.Empty;
string requestHeaders = string.Empty;
string postResponse = string.Empty;

foreach (var t in traffic)
{
    if (t.Url == desiredUrl && t.Method == "POST")
    {
        postResponse = Encoding.UTF8.GetString(t.ResponseBody); // Преобразование массива байтов в строку
        postData = t.RequestBody; // Параметры
        requestHeaders = t.RequestHeaders; // Заголовки
        break;
    }
}

// Сохраняю содержимое ответа в переменную Zennoposter
project.Variables["ResponseCode"].Value = postResponse;
Предварительно нужно создать еще один кубик на C# который запустил мониторинг трафика. Добавляем до того как начнутся открываться нужные страницы в браузере
C#:
instance.UseTrafficMonitoring = true;
 
  • Спасибо
Реакции: j2082192

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 634
Благодарностей
1 230
Баллы
113
Немного апну темку ))) В целом все работает исходя из предложенного @ibred варианта тут.
Но у меня есть проблема. В мониторе два запроса, приходящие с одного урла. Запросы POST, поэтому найти нужный можно только отфильтровав по определенному тексту, который есть в теле самого запроса.
В итоге, как из этих двух автоматом выбрать тот, который либо содержит определенный текст, либо, наоборот, не содержит?
Или только через получение обоих ответов (тогда как получить все, если этот код записывает только первый попавшийся вариант), и дальнейшей обработкой уже полученных данных?
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
737
Благодарностей
485
Баллы
63
Немного апну темку ))) В целом все работает исходя из предложенного @ibred варианта тут.
Но у меня есть проблема. В мониторе два запроса, приходящие с одного урла. Запросы POST, поэтому найти нужный можно только отфильтровав по определенному тексту, который есть в теле самого запроса.
В итоге, как из этих двух автоматом выбрать тот, который либо содержит определенный текст, либо, наоборот, не содержит?
Или только через получение обоих ответов (тогда как получить все, если этот код записывает только первый попавшийся вариант), и дальнейшей обработкой уже полученных данных?
C#:
var traffic = instance.ActiveTab.GetTraffic();
foreach (var t in traffic)
{
    if (t.Url == "https://zennolab.com/ru/") //Ищем запрос по урл
    {
        if (t.ResponseBody == "нужное нам условие") //Ищем нужный запрос по телу ответа
        {
            return t.    //Возвращаем что нам надо
        }
    }
}
 
  • Спасибо
Реакции: Moonwalker

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 634
Благодарностей
1 230
Баллы
113
C#:
var traffic = instance.ActiveTab.GetTraffic();
foreach (var t in traffic)
{
    if (t.Url == "https://zennolab.com/ru/") //Ищем запрос по урл
    {
        if (t.ResponseBody == "нужное нам условие") //Ищем нужный запрос по телу ответа
        {
            return t.    //Возвращаем что нам надо
        }
    }
}
За направление спасибо, буду копать. Не совсем подходящий вариант. Как минимум, надо искать не по телу ответа, а по телу запроса. Но там поменять просто на RequestBody. Ну и надо будет, скорее, conatains, потому как тело постоянно разное, есть просто один тригер, который делает ответ ненужным ))) Плюс в моем случае еще как раз и надо не содержит, а "не содержит".
В общем, получить ответ на запросе, в теле запроса которого нет волшебного слова )) Вечером дома покручу. За логику спасибо, дальше уже регулярки, все найдем ))
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
737
Благодарностей
485
Баллы
63
За направление спасибо, буду копать. Не совсем подходящий вариант. Как минимум, надо искать не по телу ответа, а по телу запроса. Но там поменять просто на RequestBody. Ну и надо будет, скорее, conatains, потому как тело постоянно разное, есть просто один тригер, который делает ответ ненужным ))) Плюс в моем случае еще как раз и надо не содержит, а "не содержит".
В общем, получить ответ на запросе, в теле запроса которого нет волшебного слова )) Вечером дома покручу. За логику спасибо, дальше уже регулярки, все найдем ))
Можно даже в 1 иф запихать

C#:
var traffic = instance.ActiveTab.GetTraffic();
foreach (var t in traffic)
{
    if (t.Url == "https://zennolab.com/ru/" && t."еще условие") //Условия для получения запроса
    {
        return t.    //Возвращаем что нам надо
    }
}
Или через linq еще проще сделать :df:
C#:
var traffic = instance.ActiveTab.GetTraffic();

var result = traffic
    .Where(x => x.Url == "урл запроса")
    .Where(x => !x.RequestBody.Contains("Не содержит"))
    .First();
 
Последнее редактирование:

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 634
Благодарностей
1 230
Баллы
113
Можно даже в 1 иф запихать

C#:
var traffic = instance.ActiveTab.GetTraffic();
foreach (var t in traffic)
{
    if (t.Url == "https://zennolab.com/ru/" && t."еще условие") //Условия для получения запроса
    {
        return t.    //Возвращаем что нам надо
    }
}
Или через linq еще проще сделать :df:
C#:
var traffic = instance.ActiveTab.GetTraffic();

var result = traffic
    .Where(x => x.Url == "урл запроса")
    .Where(x => !x.RequestBody.Contains("Не содержит"))
    .First();
Да, уже сам разобрался )))
В итоге вот такой код получился (пусть останется тут, вдруг кому еще пригодится):

C#:
var traffic = instance.ActiveTab.GetTraffic();
foreach (var t in traffic)
{
    if (t.Url == "https://ссылка") //Ищем запрос по урл
    {
        if (!t.RequestBody.Contains("ненужный текст")) //Ищем нужный запрос по телу ответа
        {
            return System.Text.Encoding.UTF8.GetString(t.ResponseBody);  //Возвращаем что нам надо
        }
    }
}
 
  • Спасибо
Реакции: Hannes

webulitka

Client
Регистрация
20.09.2019
Сообщения
118
Благодарностей
36
Баллы
28
Вставляете C# экшен с кодом в место, откуда требуется начать запись запросов, например в самое начало:
C#:
instance.UseTrafficMonitoring = true;
Совершаете переходы по нужным страницам, а далее запускаете сбор данных из трафика:
C#:
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic) {
    if (t.Url=="https://zennolab.com/ru/") {
        return System.Text.Encoding.UTF8.GetString(t.ResponseBody);
    }
}
return "Ничего не нашли";
Вместо https://zennolab.com/ru/ указываем полный URL, содержимое которого Вы хотите получить.
А можешь подсказать как быть если значение кончной ссылки в каждом запросе всегда денамическое? спасибо
 

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 308
Благодарностей
865
Баллы
113
А можешь подсказать как быть если значение кончной ссылки в каждом запросе всегда денамическое? спасибо
Возможно так:
C#:
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic) {
    if (t.Url.Contains("https://zennolab.com/ru/")) {
        return System.Text.Encoding.UTF8.GetString(t.ResponseBody);
    }
}
return "Ничего не нашли";
 

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