Titanium web proxy нужна помощь
Нужно написать 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