C# получить токен авторизации Discord

SlipDez

Client
Регистрация
18.07.2018
Сообщения
375
Благодарностей
70
Баллы
28
Уже перебрал все варианты которые мог есть задача получить токен авторизации Discord. Решил это сделать с помощью отслеживания трафика (запросы)
и вроде как все правильно но лыжи не едут, подскажите что я не так делаю?

Код который не хочет работать:
var traffic = instance.ActiveTab.GetTraffic();//получение трафика в переменную возможно в аргументах проще указать url фильтры
string k = "https://discord.com/api/v9/science";
string patern = @"(?<=authorization:\ ).*";

foreach(TrafficItem t in traffic)//перебор в цикле
{
 
    string url = t.Url;
    string body =t.ResponseBody;
    if (url==k)// сравнение по url если есть discord Post запрос то тру и в этом запросе будет токен только это значение всегда false почему-то{
        project.SendInfoToLog(url); //вывод в лог url запроса
        string token = System.Text.RegularExpressions.Regex.Match(body,patern); // попытка получить из запроса строку вида authorization: Токен_искомое значение
        
        project.Variables["token"].Value = token; //Token => переменная проекта
    }

}
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 518
Благодарностей
1 316
Баллы
113
Уже перебрал все варианты которые мог есть задача получить токен авторизации Discord. Решил это сделать с помощью отслеживания трафика (запросы)
и вроде как все правильно но лыжи не едут, подскажите что я не так делаю?

Код который не хочет работать:
var traffic = instance.ActiveTab.GetTraffic();//получение трафика в переменную возможно в аргументах проще указать url фильтры
string k = "https://discord.com/api/v9/science";
string patern = @"(?<=authorization:\ ).*";

foreach(TrafficItem t in traffic)//перебор в цикле
{

    string url = t.Url;
    string body =t.ResponseBody;
    if (url==k)// сравнение по url если есть discord Post запрос то тру и в этом запросе будет токен только это значение всегда false почему-то{
        project.SendInfoToLog(url); //вывод в лог url запроса
        string token = System.Text.RegularExpressions.Regex.Match(body,patern); // попытка получить из запроса строку вида authorization: Токен_искомое значение
    
        project.Variables["token"].Value = token; //Token => переменная проекта
    }

}
Тут смотрели?

Вот так можно много найти
 

SlipDez

Client
Регистрация
18.07.2018
Сообщения
375
Благодарностей
70
Баллы
28

SlipDez

Client
Регистрация
18.07.2018
Сообщения
375
Благодарностей
70
Баллы
28
Этот вариант работает

C#:
var traffic = instance.ActiveTab.GetTraffic();
var tt = project.Tables["trafficTable"];

tt.AddRow(new List<string>()
{
   "Method",
   "ResultCode",
   "Url",
   "ContentType",
   "RequestHeaders",
   "RequestCookies",
   "RequestBody",
   "ResponseHeaders",
   "ResponseCookies",
   "ResponseBody"
});

foreach(TrafficItem t in traffic)
{
   var row = new List<string>()
   {
     t.Method,
     t.ResultCode.ToString(),
     t.Url,
     t.ResponseContentType,
     t.RequestHeaders,
     t.RequestCookies,
     t.RequestBody,
     t.ResponseHeaders,
     t.ResponseCookies,
     t.ResponseBody == null ? "" : Encoding.UTF8.GetString(t.ResponseBody, 0, t.ResponseBody.Length)
   };
 
   tt.AddRow(row);
}
но хотелось бы не из таблицы выдергивать данные а сразу распарсить в кубике
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 518
Благодарностей
1 316
Баллы
113
Этот вариант работает

C#:
var traffic = instance.ActiveTab.GetTraffic();
string tt = project.Tables["trafficTable"];

tt.AddRow(new List<string>()
{
   "Method",
   "ResultCode",
   "Url",
   "ContentType",
   "RequestHeaders",
   "RequestCookies",
   "RequestBody",
   "ResponseHeaders",
   "ResponseCookies",
   "ResponseBody"
});

foreach(TrafficItem t in traffic)
{
   var row = new List<string>()
   {
     t.Method,
     t.ResultCode.ToString(),
     t.Url,
     t.ResponseContentType,
     t.RequestHeaders,
     t.RequestCookies,
     t.RequestBody,
     t.ResponseHeaders,
     t.ResponseCookies,
     t.ResponseBody == null ? "" : Encoding.UTF8.GetString(t.ResponseBody, 0, t.ResponseBody.Length)
   };

   tt.AddRow(row);
}
но хотелось бы не из таблицы выдергивать данные а сразу распарсить в кубике

ChatGPT не пытались мучать? Вот вместо вас попытался, не тестировал, так как не на чем.
C#:
var traffic = instance.ActiveTab.GetTraffic();
string result = "";

foreach(TrafficItem t in traffic)
{
   result += $"Method: {t.Method}\n";
   result += $"ResultCode: {t.ResultCode}\n";
   result += $"Url: {t.Url}\n";
   result += $"ContentType: {t.ResponseContentType}\n";
   result += $"RequestHeaders: {t.RequestHeaders}\n";
   result += $"RequestCookies: {t.RequestCookies}\n";
   result += $"RequestBody: {t.RequestBody}\n";
   result += $"ResponseHeaders: {t.ResponseHeaders}\n";
   result += $"ResponseCookies: {t.ResponseCookies}\n";
   result += $"ResponseBody: {(t.ResponseBody == null ? "" : Encoding.UTF8.GetString(t.ResponseBody, 0, t.ResponseBody.Length))}\n\n";

   // Нашли первый элемент трафика, записали его и выходим
   if (result.Length > 0) {
      project.Variables["trafficResult"].Value = result;
      break;
   }
}

// Если ничего не нашли, выходим по ошибке
if (result.Length == 0) {
   throw new Exception("Traffic not found.");
}
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
726
Благодарностей
476
Баллы
63
ChatGPT не пытались мучать? Вот вместо вас попытался, не тестировал, так как не на чем.
C#:
var traffic = instance.ActiveTab.GetTraffic();
string result = "";

foreach(TrafficItem t in traffic)
{
   result += $"Method: {t.Method}\n";
   result += $"ResultCode: {t.ResultCode}\n";
   result += $"Url: {t.Url}\n";
   result += $"ContentType: {t.ResponseContentType}\n";
   result += $"RequestHeaders: {t.RequestHeaders}\n";
   result += $"RequestCookies: {t.RequestCookies}\n";
   result += $"RequestBody: {t.RequestBody}\n";
   result += $"ResponseHeaders: {t.ResponseHeaders}\n";
   result += $"ResponseCookies: {t.ResponseCookies}\n";
   result += $"ResponseBody: {(t.ResponseBody == null ? "" : Encoding.UTF8.GetString(t.ResponseBody, 0, t.ResponseBody.Length))}\n\n";

   // Нашли первый элемент трафика, записали его и выходим
   if (result.Length > 0) {
      project.Variables["trafficResult"].Value = result;
      break;
   }
}

// Если ничего не нашли, выходим по ошибке
if (result.Length == 0) {
   throw new Exception("Traffic not found.");
}
Это чат сразу код под зеннопостер выдал, или это код от чата переделанный под ZP?
 

SlipDez

Client
Регистрация
18.07.2018
Сообщения
375
Благодарностей
70
Баллы
28
ChatGPT не пытались мучать? Вот вместо вас попытался, не тестировал, так как не на чем.
C#:
var traffic = instance.ActiveTab.GetTraffic();
string result = "";

foreach(TrafficItem t in traffic)
{
   result += $"Method: {t.Method}\n";
   result += $"ResultCode: {t.ResultCode}\n";
   result += $"Url: {t.Url}\n";
   result += $"ContentType: {t.ResponseContentType}\n";
   result += $"RequestHeaders: {t.RequestHeaders}\n";
   result += $"RequestCookies: {t.RequestCookies}\n";
   result += $"RequestBody: {t.RequestBody}\n";
   result += $"ResponseHeaders: {t.ResponseHeaders}\n";
   result += $"ResponseCookies: {t.ResponseCookies}\n";
   result += $"ResponseBody: {(t.ResponseBody == null ? "" : Encoding.UTF8.GetString(t.ResponseBody, 0, t.ResponseBody.Length))}\n\n";

   // Нашли первый элемент трафика, записали его и выходим
   if (result.Length > 0) {
      project.Variables["trafficResult"].Value = result;
      break;
   }
}

// Если ничего не нашли, выходим по ошибке
if (result.Length == 0) {
   throw new Exception("Traffic not found.");
}
К сожалению не работает(
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 641
Баллы
113
трафик нужно включать заранее
 

SlipDez

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

C#:
instance.UseTrafficMonitoring = true; //начинаем запись трафика
Переход на https://discord.com/channels/@me
C#:
// Установленная пауза
System.Threading.Thread.Sleep(2 * 1000);

var traffic = instance.ActiveTab.GetTraffic(); // заносим весь трафик в переменную
var tt = project.Tables["trafficTable"]; // таблицу в переменную



foreach(TrafficItem t in traffic)
{
    var row = new List<string>()
    {
        //состоящего из:
        t.Method,
        t.ResultCode.ToString(),
        t.Url,
        t.ResponseContentType,
        t.RequestHeaders,
        t.RequestCookies,
        t.RequestBody,
        t.ResponseHeaders,
        t.ResponseCookies,
        t.ResponseBody == null ? "" : Encoding.UTF8.GetString(t.ResponseBody, 0, t.ResponseBody.Length)
    };
    // Если составляющая url запроса содержит /api..
    if(t.Url.Contains("/api/v9/science")){
        tt.AddRow(row);//добавляем строку
        
    }
    
}

string q = tt.GetCell("E",0); // берем значение ячейки где находится токен
if (q!="") project.Variables["token"].Value = q;
else project.Variables["token"].Value = tt.GetCell("E",1);
tt.Clear(); //очистка временной таблицы
и следующим кубиком получение значения из body
C#:
string str = project.Variables["token"].Value;
string patern = @"(?<=uthorization:\ ).*"; //регулярка для поиска значения
project.Variables["token"].Value = System.Text.RegularExpressions.Regex.Match(str,patern).Value; //в переменную значение поиска
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 233
Благодарностей
573
Баллы
113
Есть такой js скрипт, возможно, понадобится прописать return.
JavaScript:
(webpackChunkdiscord_app.push([[''],{},e=>{m=[];for(let c in e.c)m.push(e.c[c])}]),m).find(m=>m?.exports?.default?.getToken!==void 0).exports.default.getToken()
 
  • Спасибо
Реакции: SlipDez и djaga

alex8020

Client
Регистрация
16.08.2016
Сообщения
38
Благодарностей
39
Баллы
18
Такой код у меня работает
C#:
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic)
{
    if(t.Url == "https://discord.com/api/v9/science")
    {
        project.Variables["token"].Value = Regex.Match(t.RequestHeaders, @"(?<=Authorization:\ ).*").Value.Trim();
        break;
    }
}
 
  • Спасибо
Реакции: SlipDez

SlipDez

Client
Регистрация
18.07.2018
Сообщения
375
Благодарностей
70
Баллы
28
Такой код у меня работает
C#:
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic)
{
    if(t.Url == "https://discord.com/api/v9/science")
    {
        project.Variables["token"].Value = Regex.Match(t.RequestHeaders, @"(?<=Authorization:\ ).*").Value.Trim();
        break;
    }
}
Хорошее короткое решение, я пытался нечто такое писать, но у меня почему-то все время в условии был false
 

SlipDez

Client
Регистрация
18.07.2018
Сообщения
375
Благодарностей
70
Баллы
28
Есть такой js скрипт, возможно, понадобится прописать return.
JavaScript:
(webpackChunkdiscord_app.push([[''],{},e=>{m=[];for(let c in e.c)m.push(e.c[c])}]),m).find(m=>m?.exports?.default?.getToken!==void 0).exports.default.getToken()
Код отлично работает, но ничего не понятно что написано)):-)
 

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