Взаимодействие с сайтом через 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");
}