Авторизация на сайте для последующего парсинга страницы - C#

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

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

Добрый день. Пытаюсь написать первую программу на C#. Требуется: зайти на сайт trustlink.ru, залогиниться, спарсить текущий баланс. Нагуглил исходник парсера - с ним вроде проблем нет. Далее нашел статью по авторизации: http://www.rsdn.ru/article/inet/httpweb.xml Добавил нужного кода. Но почему-то авторизация так и не заработала. В логах Fiddlera обнаружил, что авторизация не идет и сайт кидает на страницу http://www.trustlink.ru/users/login. Причем опять же из логов заметил такую штуку, что при входе вручную через браузер, в ответах есть куки, но при работе программы их почему-то нет. Помогите пожалуйста. Код приложил, user[login]=

yourlogin

&user[password]=

yourpass

в выделенном должны быть логин/пароль.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.IO;
  10. using System.Text.RegularExpressions;
  11. using System.Net;
  12. namespace My1
  13. {
  14. public partial class Form1 : Form
  15. {
  16. private int i = 10;
  17. public Form1()
  18. {
  19. InitializeComponent();
  20.  
  21. }
  22. // Раньше. Парс + таймер
  23. private string GetEasylabViews()
  24. {
  25. string url = "http://trustlink.ru";
  26. string html = string.Empty;
  27. string pattern = "Вывести средства из системы";
  28. //Заходим на главную, чтобы узнать сессию
  29. HttpWebResponse result = null;
  30. byte[] SomeBytes = null;
  31. HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://trustlink.ru");
  32. request.Proxy = new WebProxy("127.0.0.1", 8888);
  33. request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31";
  34. request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
  35. request.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
  36. request.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.3");
  37. request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
  38. request.ContentType = "application/x-www-form-urlencoded";
  39. result = (HttpWebResponse)request.GetResponse();
  40. string sCookies = request.Headers["Set-Cookie"];
  41. // Логинимся
  42. request = (HttpWebRequest)WebRequest.Create("http://trustlink.ru/user/auth");
  43. request.Proxy = new WebProxy("127.0.0.1", 8888);
  44. request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31";
  45. request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
  46. request.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
  47. request.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.3");
  48. request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
  49. request.ContentType = "application/x-www-form-urlencoded";
  50. if (!String.IsNullOrEmpty(sCookies)) request.Headers.Add(HttpRequestHeader.Cookie, sCookies);
  51. request.AllowAutoRedirect = false;
  52. request.Method = "POST";
  53. string FormParams = "user[login]=yourlogin&user[password]=yourpass";
  54. SomeBytes = Encoding.UTF8.GetBytes(FormParams);
  55. request.ContentLength = SomeBytes.Length;
  56. Stream newStream = request.GetRequestStream();
  57. newStream.Write(SomeBytes, 0, SomeBytes.Length);
  58. newStream.Close();
  59. result = (HttpWebResponse)request.GetResponse();
  60. // Идем на страницу статистики
  61. // получаем cookie
  62. sCookies = "";
  63. if (!String.IsNullOrEmpty(request.Headers["Set-Cookie"]))
  64. {
  65. sCookies = request.Headers["Set-Cookie"];
  66. }
  67. request = (HttpWebRequest)WebRequest.Create("http://www.trustlink.ru/sites/list");
  68. request.Referer = "http://www.trustlink.ru";
  69. request.Proxy = new WebProxy("127.0.0.1", 8888);
  70. request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31";
  71. request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
  72. request.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
  73. request.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.3");
  74. request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
  75. request.ContentType = "application/x-www-form-urlencoded";
  76. if (!String.IsNullOrEmpty(sCookies))
  77. {
  78. request.Headers.Add(HttpRequestHeader.Cookie, sCookies);
  79. }
  80. result = (HttpWebResponse)request.GetResponse();
  81. StreamReader sr = new StreamReader(result.GetResponseStream(), Encoding.GetEncoding(1251));
  82. html = sr.ReadToEnd();
  83. Match res;
  84. res = Regex.Match(html, pattern);
  85. return res.Groups[1].ToString();
  86. }
  87. private void timer1_Tick(object sender, EventArgs e)
  88. {
  89. i--;
  90. this.COUNTER.Text = i.ToString();
  91. if (i == 0)
  92. {
  93. this.VIEWS.Text = this.GetEasylabViews();
  94. i = 10;
  95. }
  96. }
  97. }
  98. }

Решение задачи: «Авторизация на сайте для последующего парсинга страницы»

textual
Листинг программы
  1. Regex pattern = new Regex(@".*(?=\ <a\ href=""\#""\ class=""link""\ onclick)");
  2. Match res = pattern.Match(html);
  3.  
  4.             if (res.Success) return res.Value.ToString();
  5.             else return "Ошибка";

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


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

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

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

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

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

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