Заклиниться на сайт, не используя веббраузер - C#
Формулировка задачи:
Здравствуйте. Вот, есть такой старинный быдлокод, хотел переписать на что-нибудь стоящее:
Хотелось бы что-нибудь поуниверсальней, например, какие-нибудь POST-запросы. Как это можно сделать? А то я в этом не очень разбираюсь ))
Блин, не заклиниться, а залогиниться
Листинг программы
- 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);
- }
- }
- }
- }
- }
Решение задачи: «Заклиниться на сайт, не используя веббраузер»
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);
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д