Titanium web proxy нужна помощь

Рейтинг: 1Ответов: 0Опубликовано: 04.04.2023

Нужно написать http сервер с помощью Titanium web proxy, но у меня ничего не выходит из-за того, что я не совсем понимаю документацию, так как в ней некоторые методы асинхронны, но программа не дожидается их асинхронного выполнения, и выполняет синхронно. Так же не до конца понимаю с прослушиванием моего установленного прокси, как его установить, прослушать, получить пакет, отдать клиенту и тп, также мне нужно, чтобы сервер стоял на локалхосте. Вот то, что я пробовал сегодня сделать:

public static void StartProxy()
    {
        ProxyServer proxyServer = new ProxyServer(true, true,true);
        //proxyServer.UpStreamHttpsProxy = new ExternalProxy("127.0.0.1", port);
        var explicitEndPoint = new ExplicitProxyEndPoint(IPAddress.Parse(ip), port, false);
        proxyServer.BeforeRequest += OnRequest;
        explicitEndPoint.BeforeTunnelConnectRequest += OnBeforeTunnelConnectRequest;
        proxyServer.AddEndPoint(explicitEndPoint);
        proxyServer.Start();
        Console.ReadLine();

        //proxyServer.BeforeResponse -= OnBeforeResponse;
        proxyServer.Stop();


    }

    public static void Write(string message)
    {
        string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "FILE.txt");
        using (StreamWriter sw = File.CreateText(path))
        {
            sw.WriteLine(message);
            Console.WriteLine("Файл записан!");
        }
    }


    public static async Task OnRequest(object sender, SessionEventArgs e)
    {

        //Write(e.HttpClient.Request.Url);

        //// To cancel a request with a custom HTML content
        //// Filter URL
        //// Redirect example
        //if (e.HttpClient.Request.RequestUri.AbsoluteUri.Contains("stackoverflow.com"))
        //{
        //    e.Redirect("https://www.paypal.com");
        //}
        //var smth =  e.Redirect("https://www.paypal.com");

        //string requestBodySent = e.HttpClient.Request.HasBody ? e.HttpClient.Request.BodyString : null;
        //var body = await e.GetRequestBodyAsString();
        //CustomRequests requestSent = new CustomRequests(e.HttpClient.Request.Method, e.HttpClient.Request.HeaderText, requestBodySent, e.HttpClient.Request.RequestUri);

        //requestHistory.Add(requestSent);
        Console.WriteLine(e.HttpClient.Request.Url);
        var requestHeaders = e.HttpClient.Request.Headers;
        var method = e.HttpClient.Request.Method.ToUpper();
        var link = e.HttpClient.Request.RequestUriString.ToLower();
        Console.WriteLine(link);
        Write(method);
        Write(link);
        if ((method == "POST" || method == "PUT" || method == "PATCH"))
        {
            byte[] bodyBytes = await e.GetRequestBody();
            e.SetRequestBody(bodyBytes);
            string bodyString = await e.GetRequestBodyAsString();
            e.SetRequestBodyString(bodyString);
            e.UserData = e.HttpClient.Request;
        }



    }

    private static async Task OnBeforeTunnelConnectRequest(object sender, TunnelConnectSessionEventArgs e)
    {
            
            string hostname = e.HttpClient.Request.RequestUri.Host;
            Write(hostname);

            if (hostname.Contains("dropbox.com"))
            {
                // Exclude Https addresses you don't want to proxy
                // Useful for clients that use certificate pinning
                // for example dropbox.com
                e.DecryptSsl = false;
            }

        
    }

в этих примерах кода я пытался вывести, получить хоть что-то, потому что я посмотрел на этом форуме несколько тем, которые задавали насчёт этой либы, но у меня всё равно ничего не получилось, ещё пробовал как-то манипулировать с proxyServer.UpStreamHttpsProxy = new ExternalProxy("127.0.0.1", port);

Дока1 , Дока2 - Доки, примеры, на которые я смотрел и пытался что-то брать: пример1, пример2, пример3, пример4, пример5

Ответы

Ответов пока нет.