Взаимодействие с сайтом через 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");
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д