Получение ответа от браузера

Необходимо получить данные от браузера, а точнее код авторизации. Я использую API ссылку для этого кода OAuth2 сервиса MailRu. Этот код отображается в адресной строке браузера после успешной авторизации, при этом происходит перенаправление на redirect_uri=.... Для запуска браузера используется Process, после этого я пытаюсь прослушать порт XXXX с помощью HttpListener, однако даже если я получаю какой-то ответ, то это бессмысленный набор символов. (UTF-8 и т.п. пробовал, результат тот же)

Как можно получить код авторизации из браузера после успешной авторизации?

Код с использованием HttpListener

static void SniffPort()
{
    byte[] input = new byte[] { 1 };
    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
    socket.Bind(new IPEndPoint(IPAddress.Broadcast, 5000));
    socket.IOControl(IOControlCode.ReceiveAll, input, null);

    byte[] buffer = new byte[4096];

    Task.Factory.StartNew(() =>
    {
        while (true)
        {
            int len = socket.Receive(buffer);
            if (len <= 40) continue;
            string bin = Encoding.Default.GetString(buffer, 0, len);
            Console.WriteLine(bin);
        }
    });
}

static HttpListener _httpListener = new HttpListener();

static void Main(string[] args)
{
    Console.WriteLine("Starting server...");
    _httpListener.Prefixes.Add("https://localhost:5000/");
    _httpListener.Start();
    Console.WriteLine("Server started.");
    SniffPort();

    ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\Users\User\Desktop\chrome-win\chrome.exe");
    startInfo.WindowStyle = ProcessWindowStyle.Normal;
    Process p = new Process();
    startInfo.Arguments = "--app=https://o2.mail.ru/login?client_id=CLIENT_ID&response_type=code&scope=userinfo&redirect_uri=https://localhost:5000/&state=some_state";
    p.StartInfo = startInfo;
    p.Start();
    p.WaitForExit();
}

Также был вариант с FiddlerCore, однако после его использования приходится изменять настройки связанные с прокси в inetcpl.cpl. Также это не работает если браузер запомнил пользователя и сразу авторизовался после запуска браузера, FiddlerCore не выдаёт эту информацию.

Код с использованием FiddlerCore

public class HttpProxy : IDisposable
{
    public HttpProxy()
    {
        Fiddler.FiddlerApplication.BeforeRequest += FiddlerApplication_BeforeRequest;
        Fiddler.FiddlerApplication.Startup(5000, true, false);
    }

    void FiddlerApplication_BeforeRequest(Fiddler.Session oSession)
    {
        Console.WriteLine(String.Format("REQ: {0}", oSession.url));
    }

    public void Dispose()
    {
        Fiddler.FiddlerApplication.Shutdown();
    }
}

static HttpListener _httpListener = new HttpListener();

static void Main(string[] args)
{
    HttpProxy httpProxy = new HttpProxy();
    
    //Запуск браузера как в коде, который находится выше.
}

Ответы (0 шт):