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;
namespace sitelogin
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Авторизация на примере сайта-игры [Ссылки могут видеть только зарегистрированные пользователи. ].
Первым делом нужно сходить в чарлик (или любой другой сниффер) и посмотреть, что мы передаем при авторизации... Для этого достаточно авторизоватся на сайте через браузер и посмотреть, как оно все выглядит в чарле. В моем случае все выглядит таким образом:
Headrs'ы:
[Ссылки могут видеть только зарегистрированные пользователи. ]
ну и сама форма авторизации:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Необязательно, но по моей привычке, я прописываю Headers'ы, чтобы быть максимально похожими на браузер.
Код:
var request = (HttpWebRequest)HttpWebRequest.Create ("http://www.darkorbit.com/?locale=en&aid=886&aip="); // Создаем сам запрос
request.Method = "Post"; //Здесь мы показываем, что это пост-запрос, что важно, при авторизации
request.Timeout = 150000;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5"; //Информация о браузере
request.Headers.Add ("Cashe-Control", "max-age=0");
request.ContentType = "application/x-www-form-urlencoded";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Referer = "http://www.darkorbit.com"; //откуда пришли
request.Headers.Add ("Accept-Language", "en-US,en;q=0.8");
request.Headers.Add ("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3");
request.CookieContainer = this.cc; //Я выделяю переменную cc, чтобы можно было использовать ее в других методах
Затем нужно программно прописать форму авторизации.
Код:
string arg = "loginForm_default_username="+HttpUtility.UrlEncode(login)+"&loginForm_default_password="+HttpUtility.UrlEncode(pass)+"&loginForm_default_login_submit=Login"; //Encode - нет проблем с хренобуквами
byte[] Bytes = Encoding.UTF8.GetBytes(arg);
request.ContentLength = Bytes.Length;
using(var sr = request.GetRequestStream())
{
sr.Write(Bytes, 0, Bytes.Length);
}
Теперь все это дело нужно соеденить. Я делаю это в методе, возвращающим исходный код страницы(имхо так удобнее).
Код:
string AuthDO (string login, string pass, string serv)
{
var request = (HttpWebRequest)HttpWebRequest.Create ("http://www.darkorbit.com/?locale=en&aid=886&aip=");
request.Timeout = 150000;
request.UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.165 Safari/535.19";
request.Headers.Add ("Cashe-Control", "max-age=0");
request.ContentType = "application/x-www-form-urlencoded";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Referer = "http://www.darkorbit.com";
request.Headers.Add ("Accept-Language", "en-US,en;q=0.8");
request.Headers.Add ("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3");
request.Method = "Post";
request.CookieContainer = this.cc;
request.AllowAutoRedirect = true;
string arg = "loginForm_default_username="+HttpUtility.UrlEncode(login)+"&loginForm_default_password="+HttpUtility.UrlEncode(pass)+"&loginForm_default_login_submit=Login"; //Encode - нет проблем с хренобуквами
byte[] Bytes = Encoding.UTF8.GetBytes(arg);
request.ContentLength = Bytes.Length;
using(var sr = request.GetRequestStream())
{
sr.Write(Bytes, 0, Bytes.Length);
}
using (var sr = new StreamReader(request.GetResponse().GetResponseStream()))
{
this.page = sr.ReadToEnd(); //Тоже самое, что и с куками
}
return page;
}
Затем метод можно вызвать так:
Код:
Console.WriteLine("Ник: "); string login = Console.ReadLine();
Console.WriteLine("Пароль: "); string password = Console.ReadLine();
Console.WriteLine("Сервер: "); string server = Console.ReadLine();
page = this.AuthDO(login, password, server); //не забываем, что page уже вынесена из методов
Дальше, в DO нужно будет выбрать сервер, но для стандартной авторизации этого вполне достаточно...
Пользуйся