Попросил меня мой хороший товарищ, написать такую программу, которая будет менять вёрстку в браузере на лету, дабы похвастаться перед друзьями сколько много у него денег на счету или обмануть каких - нибудь людей "взломом вк".
Казалось бы, "Да чё нам стоит - дом построить", залез в исходный код элемента, нажал редактировать элемент, поменял в вёрстке на нужный элемент. Профит. Дело это, конечно, хорошее, но беда в том, что ничего из этого не выйдет и после перезагрузки страницы наш счет вернется на прежний. Что же давайте это поправим....
Итак, пишем собственного бота для работы со стороннем браузером на C# или прокси сервер.
Надо ли говорить, что в ненадежных руках, эта штука, представляет серьезную опасность, поэтому сорцы будут чуток битые.
Поехали.
Открываем Visual Studio, создаем консольный проект. А далее устанавливаем следующий пакет.
	
	
	
	
		
Как это сделать?
Открываем Консоль диспетчера пакетов
		
		
	
	
		
 
	
И в окне вводим команду выше.
А далее всё просто. Пишем следующий код.
	
	
	
	
		
Меня просили пилить видосики к статьям, вот Вам видосик.
	
		
	
				
			Казалось бы, "Да чё нам стоит - дом построить", залез в исходный код элемента, нажал редактировать элемент, поменял в вёрстке на нужный элемент. Профит. Дело это, конечно, хорошее, но беда в том, что ничего из этого не выйдет и после перезагрузки страницы наш счет вернется на прежний. Что же давайте это поправим....
Итак, пишем собственного бота для работы со стороннем браузером на C# или прокси сервер.
Надо ли говорить, что в ненадежных руках, эта штука, представляет серьезную опасность, поэтому сорцы будут чуток битые.
Поехали.
Открываем Visual Studio, создаем консольный проект. А далее устанавливаем следующий пакет.
		Код:
	
	Install-Package Titanium.Web.ProxyКак это сделать?
Открываем Консоль диспетчера пакетов
И в окне вводим команду выше.
А далее всё просто. Пишем следующий код.
		Код:
	
	using System;
using System.Net;
using System.Threading.Tasks;
using Titanium.Web.Proxy;
using Titanium.Web.Proxy.EventArguments;
using Titanium.Web.Proxy.Models;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            ProxyServer proxy = new ProxyServer();
            proxy.TrustRootCertificate = true;
            proxy.BeforeRequest -= OnRequest; // Подписываем методы запрос
            proxy.BeforeResponse -= OnResponse; // Подписываем методы ответа
            proxy.ServerCertificateValidationCallback -= OnCertificateValidation; // Получени сертификата для SSL
            proxy.ClientCertificateSelectionCallback -= OnCertificateSelection;
           // Создаем точки входа и исключения
            ExplicitProxyEndPoint explicitEndPoint = new ExplicitProxyEndPoint(IPAddress.Any, 8000, true);
            proxy.AddEndPoint(explicitEndPoint);
            proxy.Start();
            var transparentEndPoint = new TransparentProxyEndPoint(IPAddress.Any, 8001, true)
            {
                GenericCertificateName = "google.com"
            };
            proxy.AddEndPoint(transparentEndPoint);
            foreach (ProxyEndPoint endPoint in proxy.ProxyEndPoints)
                Console.WriteLine("Listening on '{0}' endpoint at Ip {1} and port: {2} ",
                    endPoint.GetType().Name, endPoint.IpAddress, endPoint.Port);
            // Устанавливаем прокси
            proxy.SetAsSystemHttpProxy(explicitEndPoint);
            proxy.SetAsSystemHttpsProxy(explicitEndPoint);
            Console.Read();
            proxy.BeforeRequest -= OnRequest;
            proxy.BeforeResponse -= OnResponse;
            proxy.ServerCertificateValidationCallback -= OnCertificateValidation;
            proxy.ClientCertificateSelectionCallback -= OnCertificateSelection;
            proxy.Stop();
        }
        public static async Task OnRequest(object sender, SessionEventArgs e)
        {
            Console.WriteLine(e.WebSession.Request.Url);
            requestHeaders = e.WebSession.Request.RequestHeaders;
            var method = e.WebSession.Request.Method.ToUpper();
            if ((method == "POST"))
            {
                byte[] bodyBytes = await e.GetRequestBody();
                await e.SetRequestBody(bodyBytes);
                string bodyString = await e.GetRequestBodyAsString();
                await e.SetRequestBodyString(bodyString);
            }
        }
        public static async Task OnResponse(object sender, SessionEventArgs e)
        {
            var responseHeaders = e.WebSession.Response.ResponseHeaders;
            if (e.WebSession.Request.Method == "GET" || e.WebSession.Request.Method == "POST")
            {
                // Если всё ок возвращаем ответ
                if (e.WebSession.Response.ResponseStatusCode == "200")
                {
                    if (e.WebSession.Response.ContentType != null && e.WebSession.Response.ContentType.Trim().ToLower().Contains("text/html"))
                    {
                        byte[] bodyBytes = await e.GetResponseBody();
                        await e.SetResponseBody(bodyBytes);
                        // если запрашиваем вконтакте
                        if (e.WebSession.Request.Url.Contains("vk.com"))
                        {
                            //то изменяем верстку
                            string body = e.GetResponseBodyAsString();
                            await e.SetResponseBodyString(body.Replace(@"<span class=""current_text"">W.E.L.C.O.M.E..</span>", @"<span class=""current_text"">Специально для Codeby</span>"));
                        }
                        else
                        {
                            string body = await e.GetResponseBodyAsString();
                            await e.SetResponseBodyString(body);
                        }
                    }
                }
            }
        }
        public static Task OnCertificateValidation(object sender, CertificateValidationEventArgs e)
        {
            if (e.SslPolicyErrors = System.Net.Security.SslPolicyErrors.None)
                e.IsValid = true;
            return Task.FromResult(0);
        }
        public static Task OnCertificateSelection(object sender, CertificateSelectionEventArgs e)
        {
            return Task.FromResult(0);
        }
    }
}Меня просили пилить видосики к статьям, вот Вам видосик.
 
	 
	 
	 
	 
	
 
 
		 
 
		 
 
		 
	