Пытаюсь делать вот так Code: 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); В ответ получаю Code: 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 то есть Code: strcpy(par,"success_url=&fail_url=&try_to_login=1&email="); strcat(par,user);strcat(par,"&pass=");strcat(par,pass); это в самый конец после Code: strcat(data,"\r\nConnection: Close\r\n\r\n"); UPD А еще надо указывать сервер то есть Code: POST /login.php HTTP/1.1\r\n не конает. надо Code: POST http://vkontakte.ru/login.php HTTP/1.1\r\n
Тоесть запрос должен выглядеть примерно так Code: 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"
точнее так Code: 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 перехватывал пакет и уже на его основании писал проги.
Code: POST http://vkontakte.ru/login.php HTTP/1.1 Нафига? Достаточно Code: POST /login.php HTTP/1.1 ... Host: vkontakte.ru это ж HTTP/1.1 , учите матчасть.
Работает и так, и так. так с чего шум то подымать? ты выпендрится сюда пришел или человеку помочь? В конце запроса должно быть \r\n\r\n то есть еще одна пустая строка. не может не работать.
Незнаю у кого что там работает.Но у меня такой код Code: 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. и это в одном запросе..... Ок. чтоб ты и дальше не мучался специально выкладываю шаблон запроса, который браузер шлет контакту))) Code: 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 отдавать странички, а кому их хочется еще потом распаковывать...
О вот это контакт схавал Только вот мне ещё коеч то интересно почему то когда пароль неправильный в хттп заголовок начинается с "HTTP/1.1 200 OK",а если правильный то "HTTP/1.1 302 Found".Странно как то
Хм пароли перестали подходить ко все акам что есть При попытке входа через браузер ещё и капчу выдает Это что какая то антибот система?