Заклиниться на сайт, не используя веббраузер - 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);
}
}
}