Старый 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.
  Ответить с цитированием
Старый 15.11.2010, 22:12   #2   
Форумец
 
Сообщений: 43
Регистрация: 20.05.2008

Мамед вне форума Не в сети
Вопрос разрулился. Оказалось все просто и немного грустно. Все дело в том, шо это простой баг CookieContainer. Баг заключается в том, что, если в контейнер попадут куки с доменом,который начинается на точку, то контейнер не отправит их серверу. Мелкие исправили баг (тоже зарядили неплохо, видите ли в 2.0 - 3.5 исправлять не захотели, а исправили в 4.0, так шо пока 4.0 популярность и востребованность не наберет я больше не фанат фреймворка и мелких :-D). Обидно, канеш... Проблема решилась ручным добавлением 2 кукисов remixchk, remixsid с указанием домена без точки (vkontakte.ru вместо .vkontakte.ru). Авторизация прошла успешно. Я же благодарю вас за внимание (тех, кто, хотя бы, просто вчитались в суть проблемы), желаю вам не попадаться на это и запомнить про баг, желаю мелким не косячить так.
  Ответить с цитированием
Старый 15.11.2010, 22:40   #3   
Out There
 
Аватар для Part!zan
 
Сообщений: 5,910
Регистрация: 13.12.2004
Возраст: 47

Part!zan вне форума Не в сети
.net - зло, адназначна )
  Ответить с цитированием
Старый 18.11.2010, 13:20   #4   
Moderator
 
Аватар для mexx
 
Сообщений: 2,261
Регистрация: 21.01.2004

mexx вне форума Не в сети
ды чо, милая простыня кода
  Ответить с цитированием
Старый 19.11.2010, 10:01   #5   
Форумец
 
Сообщений: 43
Регистрация: 20.05.2008

Мамед вне форума Не в сети
Да норм штученцио, не обижайте дотнет))) Вот, кстати, vkAPI наверно зло Никак не могу разобраться (точнее, якобы разобрался, но не срабатывает) с тем, как производить запрос. При этом куча примеров в гугле ничем не помогли, установил даже тестовое приложение вконтакте, выставил в нем параметры 1 в 1 (мол вдруг я в коде у себя что-то не так сделал, или в голове что-то недопонял) так он мне такой же код оишбки что и мой код выдает, мол неверная подпись. Подробнее см. здесь
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind