В общем думаю, что тема поднималась не раз, но толком ничего не нашла. В гугле есть пара тем приятных, по их образу и писала, но что-то где-то явно не так. Естественно свой код есть и я его приведу ниже. Суть в том, что есть форма на сайте и она передает методом post логин, пароль и сервер. Я пытаюсь отправить через C# POST запрос на форму авторизации. На выходе у меня приходит что-то не понятное. абракадабра или html в каком-то шифре. Кто знает может в gzip Код моего запроса приведен ниже. Если у кого-то есть своим, то буду рада их почитать. Code: string _ContentLength = "user=LOGIN&password=******&server_select=1"; // Делаем массив байтов ASCIIEncoding encoder = new ASCIIEncoding(); byte[] POSTArray = encoder.GetBytes(_ContentLength); // Готовим запрос HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(@"http://www.SITE.ru/index.php?action=login"); System.Net.ServicePointManager.Expect100Continue = false; httpRequest.Method = "POST"; httpRequest.ProtocolVersion = HttpVersion.Version10; httpRequest.Referer = "http://www.SITE.ru/index.php?action=login&user=LOGIN&password=******&server_select=1"; httpRequest.ContentType = "application/x-www-form-urlencoded"; httpRequest.Headers.Add("Accept-Language", "ru,en-us;q=0.7,en;q=0.3"); httpRequest.Headers.Add("Accept-Encoding", "gzip,deflate"); httpRequest.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.7"); httpRequest.Headers.Add("Keep-Alive", "115"); //httpRequest.Headers.Add("Connection", "keep-alive"); httpRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2) Gecko/20100115 MRA 5.6 (build 03278) Firefox/3.6 sputnik unknown"; httpRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; httpRequest.ContentLength = POSTArray.Length; httpRequest.KeepAlive = true; // Шлем запрос Stream stream = httpRequest.GetRequestStream(); StreamWriter sv = new StreamWriter(stream); sv.Write(_ContentLength); stream.Write(POSTArray, 0, POSTArray.Length); stream.Close(); //WebResponse webResponse = httpRequest.GetResponse(); HttpWebResponse webResponse = (HttpWebResponse)httpRequest.GetResponse(); // Читаем страницу с формой StreamReader sr = new StreamReader(webResponse.GetResponseStream()); string tmp = ""; while (sr.Peek() >= 0) tmp += sr.ReadLine(); File.WriteAllText(@"C:\aaa.txt", tmp); webResponse.Close();
ужс =\ Авторизация заключается в том чтобы пихнуть кукисы вовремя. В принципе можно вот так: Code: protected override string SendPost(string url, string postData, string referer, bool allowRedirect) { var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.AllowAutoRedirect = allowRedirect; httpWebRequest.Method = "POST"; httpWebRequest.UserAgent = UserAgent; httpWebRequest.ContentType = "application/x-www-form-urlencoded"; if (!string.IsNullOrEmpty(Proxy)) { httpWebRequest.Proxy = new WebProxy(Proxy); } if (!string.IsNullOrEmpty(Cookies)) { httpWebRequest.Headers.Add(HttpRequestHeader.Cookie, Cookies); } if (!string.IsNullOrEmpty(referer)) { httpWebRequest.Referer = referer; } var buffer = Encoding.ASCII.GetBytes(postData); httpWebRequest.ContentLength = buffer.Length; using (var writer = httpWebRequest.GetRequestStream()) { writer.Write(buffer, 0, buffer.Length); } using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) { Cookies = string.IsNullOrEmpty(httpWebResponse.Headers["Set-Cookie"]) ? "" : httpWebResponse.Headers["Set-Cookie"]; using (var stream = httpWebResponse.GetResponseStream()) { using (var reader = new StreamReader(stream, Encoding.GetEncoding(1251))) { return reader.ReadToEnd(); } } } }
Ваш код делает все тоже самое, просто вы его в отдельную ф-цию перенесли. Я же в тестовом режиме пробую получить контент. Затем ф-ция уйдет в dll в красивом виде. Кстати нужно добавить строку иначе работать не будет. Code: httpWebRequest.ProtocolVersion = HttpVersion.Version10; Ваша ф-ция вернула то же что и моя. Расскажу, я пытаюсь проломиться вот сюда http://www.voyna-plemyon.ru У меня ругается на мир. Не верно выбран мир.
Code: class Program { private static bool SendPost(string url, string postData) { var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.AllowAutoRedirect = false; httpWebRequest.Method = "POST"; httpWebRequest.UserAgent = "User-Agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)"; httpWebRequest.ContentType = "application/x-www-form-urlencoded"; httpWebRequest.ProtocolVersion = HttpVersion.Version10; httpWebRequest.Referer = "http://www.voyna-plemyon.ru/"; var buffer = Encoding.ASCII.GetBytes(postData); httpWebRequest.ContentLength = buffer.Length; using (var writer = httpWebRequest.GetRequestStream()) { writer.Write(buffer, 0, buffer.Length); } using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) { var location = httpWebResponse.Headers.Get("Location") ?? ""; return location.IndexOf("server_id=ru1", StringComparison.InvariantCulture) != -1; } } static void Main(string[] args) { var user = ""; var pwd = ""; var b = SendPost("http://www.voyna-plemyon.ru/index.php?action=login", string.Format("user={0}&clear=true&password={1}&server=ru1", user, pwd)); Console.WriteLine(b); } } пропускает.
вместо нужно httpRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
Верхний скрипт возвращает false Если вставить httpRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; То результат моего скрипта не меняется. Похоже, что я из второго части поговорки про лыжи =(
дааа, реально лыжи. У меня true. и это - httpRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; не надо. фраемворк само собой 3.5
Ааааа... он зараза. Пока до конца не пройдешь, он почему-то мне ничего не возвращал. Т.е. пока я не выберу расу за кого играть, он пишет err... Все гуд, твой прошел, а мой нет. Спасибо всем огромное. Дальше ковыряемс.
Подойдет ли выше описанная реализация, для входа на deviantart.com?! Очень нужна просто авторизация(через textBox чтобы вводить логин и пароль), программить на C# начал совсем недавно, поэтому еще не совсем понимаю, что где и как..
Конечно подойдет. Там только имена нужно будет менять. Я сейчас замарочился над винформами, чтобы моя прога делала за меня многие вещи пока я сплю, к примеру.
FlyBird программы зло. делай робота ) лично я не особо понимаю прикола автоматизации серфинга web-а. регеры чекеры кликеры накрутки рейтинга и прочая лабуда это ясно - не ясно что прога может делать за тебя пока ты спишь? фотографировать тебя с вебкамеры и постить фоты на вконтакте в режими реал тайм? )) не ну бота можно написать со стандартным набором типа привет как дела привет нормально че делаешь? печатаю тебе а ты че? ... молодец. угу ага ясно ммм З.Ы надо будет написать себе такого под IM протоколы хех
Сам скрипт работает, но я не знаю, корректно ли. Как можно его модифицировать, чтобы можно было ВВОДИТЬ через textBox(ы) - логин и пароль?!