Заклиниться на сайт, не используя веббраузер - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Вот, есть такой старинный быдлокод, хотел переписать на что-нибудь стоящее:
using System;
using System.Linq;
using System.Windows.Forms;
 
namespace FatLog_in
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        public void Form1Load(object sender, EventArgs e)
        {
            var random = new Random();
            while (true)
            {
                using (var wb = new WebBrowser())
                {
                    wb.Navigate("http://gladiators.ru/");
                    while (wb.ReadyState != WebBrowserReadyState.Complete)
                        Application.DoEvents();
                    int timeToSleep;
                    if (wb.Document != null)
                    {
                        var loginElm = wb.Document.GetElementById("auth_name");
                        if (loginElm != null)
                        {
                            loginElm.SetAttribute("value", "mylogin");
                            var passwordElm = wb.Document.GetElementById("auth_pass1");
                            if (passwordElm != null)
                            {
                                passwordElm.SetAttribute("value", "mypassword");
                                wb.Document.GetElementsByTagName("input").Cast<HtmlElement>().
                                    First(element => element.GetAttribute("value") == "Войти").InvokeMember("click");
                                while (wb.ReadyState != WebBrowserReadyState.Complete)
                                    Application.DoEvents();
                               timeToSleep = 86200000 + random.Next(400000);
                            }
                            else 
                                timeToSleep = 3600000;
                        }
                        else 
                            timeToSleep = 3600000;
                    }
                    else
                        timeToSleep = 3600000;
                    System.Threading.Thread.Sleep(timeToSleep);
                }
            }
        }
    }
}
Хотелось бы что-нибудь поуниверсальней, например, какие-нибудь POST-запросы. Как это можно сделать? А то я в этом не очень разбираюсь )) Блин, не заклиниться, а залогиниться

Решение задачи: «Заклиниться на сайт, не используя веббраузер»

textual
Листинг программы
using System.Threading;
using xNet.Net;
using xNet.Collections;
using System.IO;
using System.Windows.Forms;
 
namespace POSTLogin
{
    public class Launcher : ApplicationContext
    {
        private const int SecondsInHour = 3600, SecondsToMilliseconds = 1000;
 
        public Launcher()
        {
            var postLoginer = new POSTLoginer(@"http://gladiators.ru/", "QWERTY", "qwerty");
            postLoginer.Execute();
            postLoginer.SaveToFile();
            Thread.Sleep(6*SecondsInHour*SecondsToMilliseconds);
            Application.Restart();
        }
    }
 
    public class POSTLoginer
    {
        private readonly string sitename, login, password;
        private string result;
 
        public POSTLoginer(string sitename, string login, string password)
        {
            this.sitename = sitename;
            this.login = login;
            this.password = password;
        }
 
        public string Execute()
        {
            var cookies = new CookieDictionary();
            string agent = HttpHelper.RandomUserAgent();
            using (var req = new HttpRequest())
            {
                req["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                req.Cookies = cookies;
                req["DNT"] = "1";
                req.UserAgent = agent;
                string text = req.Get("http://gladiators.ru/").ToString();
                using (var sw = new StreamWriter("page_home.html"))
                    sw.Write(text);
            }
 
            using (var req = new HttpRequest())
            {
                req["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                req.Cookies = cookies;
                req["DNT"] = "1";
                req.UserAgent = agent;
                req.Referer = "http://gladiators.ru/";
                var part = new StringDictionary();
                part["step"] = "1";
                part["login"] = "1";
                part["url"] = "";
                part["auth_name"] = login;
                part["auth_pass"] = password;
                part["auth_domain"] = "";
                part["auth_pass1"] = "";
                part["auth_remember"] = "on";
                result = req.Post(sitename, part).ToString();
            }
            return result;
        }
 
        public void SaveToFile()
        {
            File.WriteAllText("page_login.html", result);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.692 из 5
Похожие ответы