Протокол HTTP, метод POST и куки в Си-шарп

В прошлом уроке были рассмотрены самые простые HTTP-запросы, при помощи которых мы можем получить доступ к общедоступным данным, а в этом уроке мы рассмотрим, как получать авторизованный доступ, а также отправлять данные на сервер.

Для этого урока нам понадобится программа, которая осуществляет сетевой анализ трафика. А конкретно Fiddler, скачать бесплатно вы можете его здесь. Качайте, устанавливайте и запускайте. Эта программа показывает весь ваш веб-трафик (HTTP-запросы). В левой части экрана Fiddler-a размещен список всех запросов, а в правой части информация по запросу, который вы выбрали слева. Сделайте запрос в браузере (например обновите страницу с этим уроком), и после этого вы увидите в списке слева в Fiddler-е много запросов (кроме запроса страницы, там еще запрашиваются скрипты, стили, изображении и т.д, необходимые для страницы), нас будет интересовать запрос именно к этой странице (в Fiddler-e host: mycsharp.ru, url: /post/50/2015_04_19_protokol...), нажмите на этот запрос, и справа отобразится информация о нем. В правой части выберите вкладку с лупой Inspectors, в ней данные разделены на две части, вверху данные запроса, а внизу ответа. Там же есть и разные вкладки, переключитесь на вкладку "Raw" для запроса и ответа, и после этого вам будет видно данные запросов в простом виде, о котором говорилось в прошлом уроке (рисунок 1, нажмите для увеличения). Как использовать эти данные поговорим немного позже, а сейчас немного теории.

Рисунок 1 - окно Fiddler

Куки

Думаю все слышали о куках, здесь они нам понадобятся. Куки (кукисы, cookies) - это небольшие данные, которые создаются веб-сервером, и хранятся клиентом (браузером). При каждом обращении клиента к серверу, куки отправляются вместе с HTTP-запросом, и сервер их обрабатывает. Чаще всего куки используются для аутентификации (проверки подлинности) пользователя, для хранения персональных предпочтений клиента, поверхностной идентификации.

Несколько реальных примеров - здесь на сайте, если вы подписались на рассылку я выдаю вам cookie, и когда вижу что, оно у вас есть, скрываю форму для подписки. Также, бывают на сайтах анонимные опросы, которые не требую чтобы вы были авторизованы, там тоже вам выдают cookie, чтобы вы не голосовали несколько раз (но можно ведь просто удалить в браузере эти куки...), и показать вам результат. Ну и для всяких визуальных предпочтений - скрыть комментарии например.

Но в этом уроке нам будет интересно использование куков для аутентификации. Вы ввели на сайте логин и пароль, вошли своим пользователем, и дальше просматриваете сайт от этого пользователя. Без куков вам бы пришлось при каждом переходе на сайте вводить снова логин с паролем, для доступа к авторизованным функциям и данным.

А теперь рассмотрим, как кодом передавать куки, чтобы оставаться авторизованным.

Специально для этого урока я создал пользователя на сайте с логином test1111, пароль 1111. Входим им на сайт, очищаем журнал Fiddler-а (иконка крестик -> remove all), обновляем страницу в браузере, переходим в Fiddler, выбираем запрос к странице которую обновляли, и смотрим заголовки запроса, копируем всю строку заголовка cookie и устанавливаем в коде этот заголовок:

public static void Main (string[] args)
{
string uri = "http://mycsharp.ru/contacts.aspx";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

request.Headers.Add ("Cookie: _ga=GA1.2.187608599.1469356153; _ym_uid=1469356153667699515; ASP.NET_SessionId=3ddh3eu4b2e4exipzik4st5v; _ym_isad=2; _rbu=14694650945817652181; _gat=1; _rbs=14694680424413447723; _ym_visorc_21378790=w; mycsharp=77D035D8FCB046D8E0634DD106BF0E2526E9EC554EAB9EC9E13D670D
D05AD2875C223F597A8C04B4764716EFFDEA857280E5BCBFC822E18EB32A8E593
E51788A0E5DE50A96C3326B413A798AEFDE09E4C5663BD20790DADBF790FAE7B8
202B2D543D7FFB9A1667CF36934005243496E02310FD81");

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
Console.WriteLine(reader.ReadToEnd().Contains("test1111"));
Console.ReadLine();
}

Здесь в конце выводится булевое значение содержит ли строка слово "test1111", этот логин выводится (приветствие слева) лишь если вы авторизированы. Программа выводит true или false, в зависимости от того, установлен ли сookie авторизации. Вот так программно мы можем получать авторизованный доступ на сайтах.
Конечно, не со всеми сайтами это будет работать так просто, к некоторым нужен индивидуальный подход, но в целом, вы знаете куда двигаться.

Наши рекомендации