Скрипт,исходник Авторизация ВК на Delphi
//В uses: //IdHTTP, IdSSLOpenSSL, HTTPApp //Юзать так: //remixsid = VKLogin('логин', 'пароль'); //если логпасс верны, в переменной remixsid будут нужные нам кукисы //в ином случае (неверный логпасс\капча) переменная будет пустой //чтобы лазить в ВК авторизованным, нужно: //IdHTTP1.Request.CustomHeaders.Text := 'Cookie: '+remixsid; //IdHTTP1.Get('http://vk.com/id1'); function VKLogin(login, pass: string): string; var cookies: string; TIdHTTP1: TIdHTTP; IOHandler: TIdSSLIOHandlerSocketOpenSSL; begin result := ''; TIdHTTP1 := TIdHTTP.Create(nil); TIdHTTP1.ReadTimeout := 20000; TIdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'; IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil); TIdHTTP1.IOHandler := IOHandler; try TIdHTTP1.Get('https://login.vk.com/?act=login&email='+httpENCODE(login)+'&pass='+httpENCODE(pass)); except try TIdHTTP1.Get(TIdHTTP1.Response.Location); except if pos('remixsid=', TIdHTTP1.Response.RawHeaders.Text)<>0 then begin cookies := TIdHTTP1.Response.RawHeaders.Text; Delete(cookies, 1, pos('Set-Cookie: remixsid=', cookies) + length('Set-Cookie: remixsid=') -1); result := 'remixsid='+Copy(cookies, 1, pos(';', cookies) -1)+';'; end; end; end; IOHandler.Free; TIdHTTP1.Free; end;
Динамически создаем компоненты IdHTTP и TIdSSLIOHandlerSocketOpenSSL.
IdHTTP — для отправки запросов по протоколу http.
TIdSSLIOHandlerSocketOpenSSL — дабы IdHTTP работал и по httpS-соединениях (https://login.vk.com/?act=login&email=..)Настраиваем TIdHTTP(время ожидания ответа от сервера, юзерагент, SSL)
Отправляем запрос на авторизацию:
TIdHTTP1.Get('https://login.vk.com/?act=login&email='+httpENCODE(login)+'&pass='+httpENCODE(pass));Ловим редирект и переходим по нему:
TIdHTTP1.Get(TIdHTTP1.Response.Location);Блоки
try
//
except
//
end;
для того, чтобы софт не отображал сообщения с ошибками, например у IdHTTP редиректы выключены, но при переходе по ссылке сервер попытается нас редиректить — произойдёт ошибка, после вывода которой, код, который ниже кода, в котором произошел екскепшн, не выполнитсяЕсли пара логпасс правильные, то в заголовках ответа TIdHTTP будет remixsid
только он нам и нужен, дабы лазить по ВК с аккаунта)Затем проверяем наличие символов 'remixsid=' в заголовках ответа сервера, если есть — вытаскиваем
И освобождаем память
IOHandler.Free;
TIdHTTP1.Free;Что именно, собственно говоря, непонятного? rolleyes
Если что не понятно — спрашивай.UPD:
Пардон, забыл.Чтобы IdHTTP мог работать по httpS соединениях, одного компонента TIdSSLIOHandlerSocketOpenSSL мало, нужны еще две библиотеки:
http://vk.com/doc39666491_200611055 (ssleay32.dll)
http://vk.com/doc39666491_200611007 (libeay32.dll)Помести их в папку с .exe проекта и все будет работать.
Теги: Скрипт,исходник,дефли,delphi,vk