Взаимодействие с сайтом через http - C#
Формулировка задачи:
Доброго времени суток. Разбираюсь с C# и прочим потихоньку, и делаю себе приложение для игрухи, дабы не пользоваться браузером при просмотре информации об аккаунте.
Проблема в том, что после того, как я авторизовался и отсылаю запрос сервер меня не узнаёт, т.е. я где-то накосячил. Помогите разобраться
public static string glCookies; private void POST(string Referer,string Url, string Data, string Host) { System.Net.HttpWebRequest myHttpWebRequest = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(Url); myHttpWebRequest.Method = "POST"; myHttpWebRequest.Host = Host; myHttpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0"; myHttpWebRequest.Accept = "*/*"; myHttpWebRequest.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3"); myHttpWebRequest.Headers.Add("Accept-Encoding", "gzip, deflate"); myHttpWebRequest.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; myHttpWebRequest.Referer = Referer; myHttpWebRequest.Headers.Add("X-Compress", "1"); myHttpWebRequest.Headers.Add("Proxy-Authorization", "cb9338bf7556a03329a4e1b65deabd97861aec6cf03c029597b619748da5e030784c57cc949adc24"); // передаем куки, полученные в предыдущем запросе if (!String.IsNullOrEmpty(glCookies)) { myHttpWebRequest.Headers.Add(HttpRequestHeader.Cookie, glCookies); } byte[] sentData = Encoding.GetEncoding(1251).GetBytes(Data); myHttpWebRequest.ContentLength = sentData.Length; System.IO.Stream sendStream = myHttpWebRequest.GetRequestStream(); sendStream.Write(sentData, 0, sentData.Length); sendStream.Close(); //выполняем запрос System.Net.HttpWebResponse myHttpWebResponse = (System.Net.HttpWebResponse)myHttpWebRequest.GetResponse(); //получаем куки и пишем в глобальную переменную glCookies if (!String.IsNullOrEmpty(myHttpWebResponse.Headers["Set-Cookie"])) { glCookies = myHttpWebResponse.Headers["Set-Cookie"]; } System.IO.StreamReader sr = new System.IO.StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.GetEncoding(1251)); //Кодировка указывается в зависимости от кодировки ответа сервера Char[] read = new Char[256]; int count = sr.Read(read, 0, 256); string Out = String.Empty; while (count > 0) { String str = new String(read, 0, count); Out += str; count = sr.Read(read, 0, 256); } } private void GET(string Referer, string Url, string Host, string Data) { // System.Net.WebRequest myHttpWebRequest = (System.Net.WebRequest)System.Net.WebRequest.Create(Url); System.Net.HttpWebRequest myHttpWebRequest = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(Url); // System.Net.WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse(); myHttpWebRequest.Host = Host; myHttpWebRequest.Method = "GET"; myHttpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0"; myHttpWebRequest.Accept = "*/*"; myHttpWebRequest.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3"); //myHttpWebRequest.Headers.Add("Accept-Encoding", "gzip, deflate"); myHttpWebRequest.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; myHttpWebRequest.Referer = Referer; myHttpWebRequest.Headers.Add("X-Compress", "1"); myHttpWebRequest.Headers.Add("Proxy-Authorization", "cb9338bf7556a03329a4e1b65deabd97861aec6cf03c029597b619748da5e030784c57cc949adc24"); if (!String.IsNullOrEmpty(glCookies)) { myHttpWebRequest.Headers.Add(HttpRequestHeader.Cookie, glCookies); } System.Net.HttpWebResponse myHttpWebResponse = (System.Net.HttpWebResponse)myHttpWebRequest.GetResponse(); if (!String.IsNullOrEmpty(myHttpWebResponse.Headers["Set-Cookie"])) { glCookies = myHttpWebResponse.Headers["Set-Cookie"]; } System.IO.Stream stream = myHttpWebResponse.GetResponseStream(); System.IO.StreamReader sr = new System.IO.StreamReader(stream); string Out = sr.ReadToEnd(); sr.Close(); } private void button1_Click(object sender, EventArgs e) { string login = "login"; string passwd = "password"; //тут мы авторизуемся GET("", "http://www.test.com/site/logIn", "www.test.com", ""); POST("http://www.test.com/site/logIn", "http://www.test.com/site/doLogIn", "&login="+login+"&password="+passwd+"&redirection=&isBoxStyle=", "www.test.com"); GET("http://www.test.com/site/logIn", "http://www.test.com/jeu/?identification=1&redirectionMobile=yes", "www.test.com", ""); GET("http://www.test.com/jeu/?identification=1&redirectionMobile=yes", "http://www.test.com/jeu/", "www.test.com", ""); //делаем что-то на странице POST("http://www.test.com/eval/?elev=all-noses", "http://www.test.com/eval/searchnose","go=1", "www.test.com"); string token = "1e4eb3eb2ce7a4882c4295761d78384b"; GET("http://www.test.com/eval/?elev=all-noses", "http://www.test.com/eval/ahh?id=33674008", "www.test.com", ""); POST("http://www.test.com/eval/ahh?id=33674008", "http://www.test.com/eval/doEatTreat", "&csrf_token="+token+"&id=33674008&friandise=cary", "www.test.com"); }
Проблема решена - сам же нужные куки затирал, перезаписывая переменную
Решение задачи: «Взаимодействие с сайтом через http»
textual
Листинг программы
private async void Update() { var http = new HttpClient() { BaseAddress = new Uri("https://vk.com/") }; HttpResponseMessage response = await httpClient.GetAsync("dev"); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д