Поскольку спрашивают, решил на своём примере показать, как программно принимать и отправлять данные на web-сервер.
Для начала создадим класс, отправляющий вэб-запросы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
class HttpUtility { public HttpWebResponse GetPage(string url, CookieCollection cookies) { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); request.Accept = "image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*"; request.Headers.Add("Accept-Language", "ru-RU"); request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)"; request.AllowAutoRedirect = false; request.CookieContainer = new CookieContainer(); if (cookies != null) { request.CookieContainer.Add(cookies); } return (HttpWebResponse)request.GetResponse(); } public HttpWebResponse PostPage(string url, byte[] postData, CookieCollection cookies) { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); request.Method = "POST"; request.Accept = "image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*"; request.Headers.Add("Accept-Language", "ru-RU"); request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)"; request.ContentType = "application/x-www-form-urlencoded"; request.AllowAutoRedirect = false; request.ContentLength = postData.Length; request.GetRequestStream().Write(postData, 0, postData.Length); request.CookieContainer = new CookieContainer(); if (cookies != null) { request.CookieContainer.Add(cookies); } return (HttpWebResponse)request.GetResponse(); } public HttpWebResponse PostPage(string url, string postString, CookieCollection cookies) { byte[] byteArr = System.Text.Encoding.GetEncoding(1251).GetBytes(postString); return PostPage(url, byteArr, cookies); } public HttpWebResponse PostPage(string url, string postString) { return PostPage(url, postString, null); } public HttpWebResponse GetPage(string url) { return GetPage(url, null); } public string GetResponseContent(HttpWebResponse response) { StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(1251)); string result = reader.ReadToEnd(); reader.Close(); return result; } } |
Также потребуется форма с двумя текстовыми полями tbMail и tbPassword для ввода e-mail адреса и пароля соответственно, текстовым полем logBox со свойством Multiline равным True и кнопкой.
В обработчике нажатия на кнопку пишем следующее:
1 2 |
logBox.Clear(); VKLogin(tbMail.Text, tbPassword.Text) |
Также в классе формы надо будет написать 2 вспомогательных метода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/// Метод добавляет запись в лог и перерисовывает элемент управления /// ///Текст, который необходимо добавить private void logAppend(string text) { logBox.AppendText(text + "\n"); logBox.Refresh(); } /// /// Метод пытается загрузить страницу методом POST /// ///HTTP адрес нужной страницы ///Строка, содержащая отправляемые данные /// В случае ошибки возвращает null и пишет в лог private HttpWebResponse tryPostPage(string url, string postString) { HttpUtility http = new HttpUtility(); HttpWebResponse response = null; try { response = http.PostPage(url, postString); } catch { logAppend("Сбой соединения."); return null; } return response; } |
И, наконец, функция, выполняющая авторизацию В Контакте:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
private void VKLogin(string mail, string password) { HttpUtility http = new HttpUtility(); // Формируем данные POST-запроса StringBuilder query = new StringBuilder(); query.Append("email=" + mail); query.Append("&pass=" + password); query.Append("&expire=&vk="); // Отправляем запрос и получаем ответ logAppend("Loading https://login.vk.com/?act=login..."); HttpWebResponse response = tryPostPage("https://login.vk.com/?act=login", query.ToString()); // Прерываем выполнение функции, если отправка запроса не удалась if (response == null) return; // Проверяем, не перенаправили ли нас куда-то не туда?) if (response.StatusCode != HttpStatusCode.OK) { logAppend("Такой почтовый адрес не зарегистрирован, либо пароль неверный."); return; } // Выводим ID пользователя string VKid = response.Cookies["l"].Value; logAppend("ID: " + VKid); // Находим в тексте возвращённой страницы строку, необходимую для дальнейшей авторизации string s_id = ""; try { string result_s = http.GetResponseContent(response); string pattern = "<input id="s" name="s" type="hidden" value=""; // Находим строку-шаблон и копируем весь текст, начиная с конца шаблона result_s = result_s.Substring(result_s.IndexOf(pattern) + pattern.Length); // Получаем из оставшегося текста страницы массив строк; в качестве разделителя задаём символ " />"; pagetext = pagetext.Substring(pagetext.IndexOf(texttofind) + texttofind.Length); pagetext = pagetext.Substring(0, pagetext.IndexOf('<')); string username = pagetext.Substring(pagetext.IndexOf('|') + 1).Trim(); logAppend("%USERNAME%: " + username); } |
Похожие записи: