Показать сообщение отдельно
Старый 14.11.2010, 16:47   #1   
Форумец
 
Сообщений: 43
Регистрация: 20.05.2008

Мамед вне форума Не в сети
Question [C#] И снова сookies...

Доброго времени суток! Пытаюсь произвести авторизацию на vkontakte.ru, но не выходит, т.к. работа с кукисами не продвигается никак. Сетевой прокси-отладчик fiddler показывает, что ни 1 кукиса не передается серверу контактовскому, в то время как отладчик студии показывает мне что в CookieContainer все ок, куки на месте. Перепробовал по-разному, никак не могу понять в чем дело.

Код:
public static void LogIn(string login, string pass)
{
	/////////////////////////////////////////ЗАПРОС 1
	HttpWebRequest hwr = (HttpWebRequest) WebRequest.Create("http://vkontakte.ru/login.php");
	hwr.Method = "POST";
	hwr.ProtocolVersion = HttpVersion.Version10;
	hwr.UserAgent = "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.6.30 Version/10.62";
	hwr.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml, */*;q=0.1";
	hwr.Headers.Add("Accept-Language", "ru-RU,ru;q=0.9,en;q=0.8");
	hwr.Headers.Add("Accept-Charset", "iso-8859-1, utf-8, utf-16, *;q=0.1");
	hwr.Headers.Add("Accept-Encoding", "deflate, gzip, x-gzip, identity, *;q=0");
	hwr.Referer = "http://vkontakte.ru";
	hwr.ContentType = "application/x-www-form-urlencoded";
	hwr.ServicePoint.Expect100Continue = false;
	hwr.ContentLength = 18;
	CookieContainer cc = new CookieContainer();
	hwr.CookieContainer = cc;

	StreamWriter sw = new StreamWriter(hwr.GetRequestStream());
	sw.Write("op=a_login_attempt");
	sw.Close();
	HttpWebResponse wr = (HttpWebResponse) hwr.GetResponse();
	cc = hwr.CookieContainer;
	wr.Close();

	/////////////////////////////////////////ЗАПРОС 2
	hwr = (HttpWebRequest) WebRequest.Create("http://login.vk.com/?act=login");
	hwr.Method = "POST";
	hwr.ProtocolVersion = HttpVersion.Version10;
	hwr.UserAgent = "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.6.30 Version/10.62";
	hwr.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml, */*;q=0.1";
	hwr.Headers.Add("Accept-Language", "ru-RU,ru;q=0.9,en;q=0.8");
	hwr.Headers.Add("Accept-Charset", "iso-8859-1, utf-8, utf-16, *;q=0.1");
	hwr.Headers.Add("Accept-Encoding", "deflate, gzip, x-gzip, identity, *;q=0");
	hwr.Referer = "http://vkontakte.ru/";
	hwr.ContentType = "application/x-www-form-urlencoded";
	hwr.ServicePoint.Expect100Continue = false;
	hwr.CookieContainer = cc;

	//Пишем в поток логин и пасс
	sw = new StreamWriter(hwr.GetRequestStream());
	sw.Write("email=" + Uri.EscapeDataString(login) + "&pass=" + Uri.EscapeDataString(pass) + "&expire=&vk=&al_test=1");
	sw.Close();

	//Получили сжатые GZip данные - распаковываем
	wr = (HttpWebResponse) hwr.GetResponse();
	cc = hwr.CookieContainer;
	Stream input = wr.GetResponseStream();
	GZipStream gz = new GZipStream(input, CompressionMode.Decompress);
	byte[] buffer = new byte[1024];
	gz.Read(buffer, 0, 1024);
	gz.Close();
	gz.Dispose();
	wr.Close();
			

	//Достаем код из распакованных данных
	string content = ASCIIEncoding.ASCII.GetString(buffer);
	Regex rx = new Regex("value='[^']+");
	string sid = rx.Match(content).ToString().Remove(0, 7);


	/////////////////////////////////////////ЗАПРОС 3
	hwr = (HttpWebRequest)
		WebRequest.Create("http://vkontakte.ru/login.php");
	hwr.Method = "POST";
	hwr.ProtocolVersion = HttpVersion.Version10;
	hwr.UserAgent = "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.6.30 Version/10.62";
	hwr.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml, */*;q=0.1";
	hwr.AllowAutoRedirect = true;
	hwr.Headers.Add("Accept-Language", "ru-RU,ru;q=0.9,en;q=0.8");
	hwr.Headers.Add("Accept-Charset", "iso-8859-1, utf-8, utf-16, *;q=0.1");
	hwr.Headers.Add("Accept-Encoding", "deflate, gzip, x-gzip, identity, *;q=0");
	hwr.Referer = "http://login.vk.com/?act=login";
	hwr.ContentType = "application/x-www-form-urlencoded";
	hwr.ServicePoint.Expect100Continue = false;
	hwr.CookieContainer = cc;

	sw = new StreamWriter(hwr.GetRequestStream());
	sw.Write("s=" + sid + "&op=slogin&redirect=1&expire=0&to=&al_test=1");
	sw.Close();
	wr = (HttpWebResponse) hwr.GetResponse();
	wr.Close();
}

Последний раз редактировалось Мамед; 14.11.2010 в 17:08.
  Ответить с цитированием