Авторизация на сайте для последующего парсинга страницы - 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
в выделенном должны быть логин/пароль.
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using System.IO;
- using System.Text.RegularExpressions;
- using System.Net;
- namespace My1
- {
- public partial class Form1 : Form
- {
- private int i = 10;
- public Form1()
- {
- InitializeComponent();
- }
- // Раньше. Парс + таймер
- private string GetEasylabViews()
- {
- string url = "http://trustlink.ru";
- string html = string.Empty;
- string pattern = "Вывести средства из системы";
- //Заходим на главную, чтобы узнать сессию
- HttpWebResponse result = null;
- byte[] SomeBytes = null;
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://trustlink.ru");
- request.Proxy = new WebProxy("127.0.0.1", 8888);
- request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31";
- request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
- request.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
- request.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.3");
- request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
- request.ContentType = "application/x-www-form-urlencoded";
- result = (HttpWebResponse)request.GetResponse();
- string sCookies = request.Headers["Set-Cookie"];
- // Логинимся
- request = (HttpWebRequest)WebRequest.Create("http://trustlink.ru/user/auth");
- request.Proxy = new WebProxy("127.0.0.1", 8888);
- request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31";
- request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
- request.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
- request.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.3");
- request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
- request.ContentType = "application/x-www-form-urlencoded";
- if (!String.IsNullOrEmpty(sCookies)) request.Headers.Add(HttpRequestHeader.Cookie, sCookies);
- request.AllowAutoRedirect = false;
- request.Method = "POST";
- string FormParams = "user[login]=yourlogin&user[password]=yourpass";
- SomeBytes = Encoding.UTF8.GetBytes(FormParams);
- request.ContentLength = SomeBytes.Length;
- Stream newStream = request.GetRequestStream();
- newStream.Write(SomeBytes, 0, SomeBytes.Length);
- newStream.Close();
- result = (HttpWebResponse)request.GetResponse();
- // Идем на страницу статистики
- // получаем cookie
- sCookies = "";
- if (!String.IsNullOrEmpty(request.Headers["Set-Cookie"]))
- {
- sCookies = request.Headers["Set-Cookie"];
- }
- request = (HttpWebRequest)WebRequest.Create("http://www.trustlink.ru/sites/list");
- request.Referer = "http://www.trustlink.ru";
- request.Proxy = new WebProxy("127.0.0.1", 8888);
- request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31";
- request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
- request.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
- request.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.3");
- request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
- request.ContentType = "application/x-www-form-urlencoded";
- if (!String.IsNullOrEmpty(sCookies))
- {
- request.Headers.Add(HttpRequestHeader.Cookie, sCookies);
- }
- result = (HttpWebResponse)request.GetResponse();
- StreamReader sr = new StreamReader(result.GetResponseStream(), Encoding.GetEncoding(1251));
- html = sr.ReadToEnd();
- Match res;
- res = Regex.Match(html, pattern);
- return res.Groups[1].ToString();
- }
- private void timer1_Tick(object sender, EventArgs e)
- {
- i--;
- this.COUNTER.Text = i.ToString();
- if (i == 0)
- {
- this.VIEWS.Text = this.GetEasylabViews();
- i = 10;
- }
- }
- }
- }
Решение задачи: «Авторизация на сайте для последующего парсинга страницы»
textual
Листинг программы
- Regex pattern = new Regex(@".*(?=\ <a\ href=""\#""\ class=""link""\ onclick)");
- Match res = pattern.Match(html);
- if (res.Success) return res.Value.ToString();
- else return "Ошибка";
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д