Просмотр полной версии : Как залогинится вконтакт через сокет?
Пытаюсь делать вот так
char *data=new char[1024*1024];
char *acce=new char[1024*1024];
char *par=new char[1024*5];
char host[100]="vkontakte.ru";
char user[100]="";
char pass[100]="";
SOCKET s;char *Ip=new char[150];
SOCKADDR_IN adr;
WSADATA wsd;
WSAStartup(MAKEWORD(2,0),&wsd);
hostent *h;
h=gethostbyname(host);
sprintf(Ip,"%d.%d.%d.%d",(unsigned char)h->h_addr_list[0][0],(unsigned char)h->h_addr_list[0][1],(unsigned char)h->h_addr_list[0][2],(unsigned char)h->h_addr_list[0][3]);
adr.sin_family=AF_INET;
adr.sin_addr.s_addr =inet_addr(Ip);
adr.sin_port = htons(80);
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
connect(s,(sockaddr*)&adr,sizeof(adr));
strcpy(par,"success_url=&fail_url=&try_to_login=1&email=");
strcat(par,user);strcat(par,"&pass=");strcat(par,pass);
strcpy(data,"POST /login.php HTTP/1.1\r\n");
strcat(data,"Accept: */*\r\n");
strcat(data,"Referer: http://vkontakte.ru/login.php?u=1\r\n");
strcat(data,"Accept-Language: ru\r\n");
strcat(data,"Content-Type: text/html\r\n");
strcat(data,"User-Agent: Mozilla/4.0");
strcat(data,"Host: vkontakte.ru\r\n");
strcat(data,"Content-Length: ");strcat(data,AnsiString(strlen(par)).c_str());
strcat(data,"\r\n");strcat(data,"Connection: Keep-Alive\r\n");
strcat(data,"Cache-Control: no-cache\r\n");strcat(data,par);
strcat(data,"\r\nConnection: Close\r\n\r\n");
send(s,data,strlen(data),0);
recv(s,acce,1024*1024,0);
В ответ получаю
HTTP/1.1 400 Bad Request
Server: nginx/0.6.31
Date: Sun, 07 Dec 2008 16:10:38 GMT
Content-Type: text/html
Content-Length: 173
Connection: close
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/0.6.31</center>
</body>
</html>
Возможно я неправильно составил запрос :( Может кто то подскажет как его правильно составить?
Пост параметры кажется передаются в конце http-запроса после \r\n
то есть
strcpy(par,"success_url=&fail_url=&try_to_login=1&email=");
strcat(par,user);strcat(par,"&pass=");strcat(par,pass);
это в самый конец после
strcat(data,"\r\nConnection: Close\r\n\r\n");
UPD
А еще надо указывать сервер
то есть
POST /login.php HTTP/1.1\r\n
не конает. надо
POST http://vkontakte.ru/login.php HTTP/1.1\r\n
Пост параметры кажется передаются в конце http-запроса после \r\n
то есть
strcpy(par,"success_url=&fail_url=&try_to_login=1&email=");
strcat(par,user);strcat(par,"&pass=");strcat(par,pass);
это в самый конец после
strcat(data,"\r\nConnection: Close\r\n\r\n");
UPD
А еще надо указывать сервер
то есть
POST /login.php HTTP/1.1\r\n
не конает. надо
POST http://vkontakte.ru/login.php HTTP/1.1\r\n
Тоесть запрос должен выглядеть примерно так
POST /login.php HTTP/1.1
Accept: */*
Referer: http://vkontakte.ru/login.php?u=1
Accept-Language: ru
Content-Type: text/html
User-Agent: Mozilla/4.0Host: vkontakte.ru
Content-Length: 70
Connection: Keep-Alive
Cache-Control: no-cache
Connection: Close
success_url=&fail_url=&try_to_login=1&email=lalala@mail.ru&pass=lalala
?
Все равно "Bad Request" :(
точнее так
POST http://vkontakte.ru/login.php HTTP/1.1
Accept: */*
Referer: http://vkontakte.ru/login.php?u=1
Accept-Language: ru
Content-Type: text/html
User-Agent: Mozilla/4.0
Host: vkontakte.ru
Content-Length: 70
Connection: Keep-Alive
Cache-Control: no-cache
Connection: Close
success_url=&fail_url=&try_to_login=1&email=lalala@mail.ru&pass=lalala
кстати прошу обратить внимание что надо следить за Content-Length. он должен равнятся sizeof(str) где str длина строки с переменными и параметрами. Content-Length должно быть не более (иначе дополнится пробелами) и не менее (иначе не все переменные влезут).
А вобще когда я писал подобные проги на сокетах то делал вот как. ставил naviscope, настраивал браузер на работу через него, делал в браузере что надо, а в naviscope перехватывал пакет и уже на его основании писал проги.
Delimiter
07.12.2008, 21:04
согласен с предыдущим, что нормально писать с сетевым снифером и геморой теоретически предполагая!
POST http://vkontakte.ru/login.php HTTP/1.1
Нафига?
Достаточно
POST /login.php HTTP/1.1
...
Host: vkontakte.ru
это ж HTTP/1.1 , учите матчасть.
Да что так что сяк, всеравно Bad Request
']POST http://vkontakte.ru/login.php HTTP/1.1
Нафига?
Достаточно
POST /login.php HTTP/1.1
...
Host: vkontakte.ru
это ж HTTP/1.1 , учите матчасть.
Работает и так, и так. так с чего шум то подымать? ты выпендрится сюда пришел или человеку помочь?
В конце запроса должно быть \r\n\r\n то есть еще одна пустая строка. не может не работать.
Незнаю у кого что там работает.Но у меня такой код
char *data=new char[1024*1024];
char *acce=new char[1024*1024];
char *par=new char[1024*5];
char host[100]="vkontakte.ru";
char user[100]="lalalalal@mail.ru";
char pass[100]="lalalala";
SOCKET s;char *Ip=new char[150];
SOCKADDR_IN adr;
WSADATA wsd;
WSAStartup(MAKEWORD(2,0),&wsd);
hostent *h;
h=gethostbyname(host);
sprintf(Ip,"%d.%d.%d.%d",(unsigned char)h->h_addr_list[0][0],(unsigned char)h->h_addr_list[0][1],(unsigned char)h->h_addr_list[0][2],(unsigned char)h->h_addr_list[0][3]);
adr.sin_family=AF_INET;
adr.sin_addr.s_addr =inet_addr(Ip);
adr.sin_port = htons(80);
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
connect(s,(sockaddr*)&adr,sizeof(adr));
strcpy(par,"success_url=&fail_url=&try_to_login=1&email=");
strcat(par,user);strcat(par,"&pass=");strcat(par,pass);
strcpy(data,"POST http://vkontakte.ru/login.php HTTP/1.1\r\n");
strcat(data,"Accept: */*\r\n");
strcat(data,"Referer: http://vkontakte.ru/login.php?u=1\r\n");
strcat(data,"Accept-Language: ru\r\n");
strcat(data,"Content-Type: text/html\r\n");
strcat(data,"User-Agent: Mozilla/4.0");
strcat(data,"Host: vkontakte.ru\r\n");
strcat(data,"Content-Length: ");strcat(data,AnsiString(strlen(par)).c_str());
strcat(data,"\r\n");strcat(data,"Connection: Keep-Alive\r\n");
strcat(data,"Cache-Control: no-cache");//strcat(data,par);
strcat(data,"\r\nConnection: Close\r\n\r\n");
strcat(data,par);strcat(data,"\r\n\r\n");
send(s,data,strlen(data),0);
recv(s,acce,1024*1024,0);
Memo1->Text=AnsiString(acce);
В ответ получает только HTTP/1.1 400 Bad Request :(
Видишь ли в чем дело. То у тебя Connection: Keep-Alive, то Connection: Close. и это в одном запросе.....
Ок. чтоб ты и дальше не мучался специально выкладываю шаблон запроса, который браузер шлет контакту)))
POST http://vkontakte.ru/login.php HTTP/1.0
User-Agent: Opera/9.62 (Windows NT 5.1; U; ru) Presto/2.1.1
Host: vkontakte.ru
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://vkontakte.ru/index.php
Proxy-Connection: Keep-Alive
Content-Length: 38
Content-Type: application/x-www-form-urlencoded
email=<email>&pass=<pass>
я бы посоветовал изменить эту строчку:
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
видите ли вконтакте любит в gzip отдавать странички, а кому их хочется еще потом распаковывать...
https://forum.antichat.ru/threadnav69514-2-10.html
смотрим тут, и составляем правильный запрос.
Видишь ли в чем дело. То у тебя Connection: Keep-Alive, то Connection: Close. и это в одном запросе.....
Ок. чтоб ты и дальше не мучался специально выкладываю шаблон запроса, который браузер шлет контакту)))
POST http://vkontakte.ru/login.php HTTP/1.0
User-Agent: Opera/9.62 (Windows NT 5.1; U; ru) Presto/2.1.1
Host: vkontakte.ru
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://vkontakte.ru/index.php
Proxy-Connection: Keep-Alive
Content-Length: 38
Content-Type: application/x-www-form-urlencoded
email=<email>&pass=<pass>
О вот это контакт схавал :)
Только вот мне ещё коеч то интересно почему то когда пароль неправильный в хттп заголовок начинается с "HTTP/1.1 200 OK",а если правильный то "HTTP/1.1 302 Found".Странно как то :confused:
Хм пароли перестали подходить ко все акам что есть :confused: При попытке входа через браузер ещё и капчу выдает :mad: Это что какая то антибот система?
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot