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

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

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

Здравствуйте. Вот, есть такой старинный быдлокод, хотел переписать на что-нибудь стоящее:
Листинг программы
  1. using System;
  2. using System.Linq;
  3. using System.Windows.Forms;
  4. namespace FatLog_in
  5. {
  6. public partial class Form1 : Form
  7. {
  8. public Form1()
  9. {
  10. InitializeComponent();
  11. }
  12. public void Form1Load(object sender, EventArgs e)
  13. {
  14. var random = new Random();
  15. while (true)
  16. {
  17. using (var wb = new WebBrowser())
  18. {
  19. wb.Navigate("http://gladiators.ru/");
  20. while (wb.ReadyState != WebBrowserReadyState.Complete)
  21. Application.DoEvents();
  22. int timeToSleep;
  23. if (wb.Document != null)
  24. {
  25. var loginElm = wb.Document.GetElementById("auth_name");
  26. if (loginElm != null)
  27. {
  28. loginElm.SetAttribute("value", "mylogin");
  29. var passwordElm = wb.Document.GetElementById("auth_pass1");
  30. if (passwordElm != null)
  31. {
  32. passwordElm.SetAttribute("value", "mypassword");
  33. wb.Document.GetElementsByTagName("input").Cast<HtmlElement>().
  34. First(element => element.GetAttribute("value") == "Войти").InvokeMember("click");
  35. while (wb.ReadyState != WebBrowserReadyState.Complete)
  36. Application.DoEvents();
  37. timeToSleep = 86200000 + random.Next(400000);
  38. }
  39. else
  40. timeToSleep = 3600000;
  41. }
  42. else
  43. timeToSleep = 3600000;
  44. }
  45. else
  46. timeToSleep = 3600000;
  47. System.Threading.Thread.Sleep(timeToSleep);
  48. }
  49. }
  50. }
  51. }
  52. }
Хотелось бы что-нибудь поуниверсальней, например, какие-нибудь POST-запросы. Как это можно сделать? А то я в этом не очень разбираюсь )) Блин, не заклиниться, а залогиниться

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

textual
Листинг программы
  1. using System.Threading;
  2. using xNet.Net;
  3. using xNet.Collections;
  4. using System.IO;
  5. using System.Windows.Forms;
  6.  
  7. namespace POSTLogin
  8. {
  9.     public class Launcher : ApplicationContext
  10.     {
  11.         private const int SecondsInHour = 3600, SecondsToMilliseconds = 1000;
  12.  
  13.         public Launcher()
  14.         {
  15.             var postLoginer = new POSTLoginer(@"http://gladiators.ru/", "QWERTY", "qwerty");
  16.             postLoginer.Execute();
  17.             postLoginer.SaveToFile();
  18.             Thread.Sleep(6*SecondsInHour*SecondsToMilliseconds);
  19.             Application.Restart();
  20.         }
  21.     }
  22.  
  23.     public class POSTLoginer
  24.     {
  25.         private readonly string sitename, login, password;
  26.         private string result;
  27.  
  28.         public POSTLoginer(string sitename, string login, string password)
  29.         {
  30.             this.sitename = sitename;
  31.             this.login = login;
  32.             this.password = password;
  33.         }
  34.  
  35.         public string Execute()
  36.         {
  37.             var cookies = new CookieDictionary();
  38.             string agent = HttpHelper.RandomUserAgent();
  39.             using (var req = new HttpRequest())
  40.             {
  41.                 req["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
  42.                 req.Cookies = cookies;
  43.                 req["DNT"] = "1";
  44.                 req.UserAgent = agent;
  45.                 string text = req.Get("http://gladiators.ru/").ToString();
  46.                 using (var sw = new StreamWriter("page_home.html"))
  47.                     sw.Write(text);
  48.             }
  49.  
  50.             using (var req = new HttpRequest())
  51.             {
  52.                 req["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
  53.                 req.Cookies = cookies;
  54.                 req["DNT"] = "1";
  55.                 req.UserAgent = agent;
  56.                 req.Referer = "http://gladiators.ru/";
  57.                 var part = new StringDictionary();
  58.                 part["step"] = "1";
  59.                 part["login"] = "1";
  60.                 part["url"] = "";
  61.                 part["auth_name"] = login;
  62.                 part["auth_pass"] = password;
  63.                 part["auth_domain"] = "";
  64.                 part["auth_pass1"] = "";
  65.                 part["auth_remember"] = "on";
  66.                 result = req.Post(sitename, part).ToString();
  67.             }
  68.             return result;
  69.         }
  70.  
  71.         public void SaveToFile()
  72.         {
  73.             File.WriteAllText("page_login.html", result);
  74.         }
  75.     }
  76. }

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


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

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

13   голосов , оценка 3.692 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы