Всем доброго времени суток. Хочу зайти насайт через свою програму. но как выяснилось для авторизации на сайте сайт генерирует token. Каждый раз он новый. Вопрос как мне сделать авторизацию. Есть идея что сначала он должен подгрузить код найти там token и только потом провести Авторизацию с подстоновкой token-а в нужное место. А вот как реализовать я не понимаю =\
Код post запроса на сайте выглядит так.
PHP код:
<div id="SignInOrSignUpDialog" title="Велком!" class="qtipped" style="display: none;">
<form method="POST" action="/login" name="sf_guard_signin" id="sf_guard_signin" class="sfSignin">
<li>
<label for="signin_username">Логин:</label>
<input type="text" name="signin[username]" id="signin_username" />
</li>
<li>
<label for="signin_password">Пароль:</label>
<input type="password" name="signin[password]" id="signin_password" />
</li>
<li>
<label for="signin_remember">Запомнить меня</label>
<input type="checkbox" name="signin[remember]" checked="checked" id="signin_remember" />
<input type="hidden" name="signin[_csrf_token]" value="72384a7deb531d60b3102bf0dd6a2097" id="signin__csrf_token" /></li>
<input type="submit" value="Войти" />
</form>
Пробовал по примеру:
Код:
function extract(const text, begin1, end1: string): string;
var
startpos, endpos: integer;
begin
result := '';
startpos := Pos(begin1, text);
if startpos < 1 then
exit;
inc(startpos, length(begin1));
endpos := Pos(end1, text, startpos);
if endpos < 1 then
exit;
result := Copy(text, startpos, endpos - startpos);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
StrPage, Url, token: string;
Log: TStringList;
begin
Url := 'http://joyreactor.cc/login';
StrPage := IdHTTP1.Get(Url);
token := extract(StrPage, 'name="token" value="', '"');
Log := TStringList.Create;
IdHTTP1.Response.RawHeaders.extract('Set-cookie', Log);
IdHTTP1.Request.CustomHeaders.text := 'Cookie:joyreactor=' + extract(Log.text,
'joyreactor=', ';') + ';';
Log.Clear;
Log.Add('signin[username]=' + Edit1.text);
Log.Add('signin[password]=' + Edit2.text);
Log.Add('signin[remember]=on');
Log.Add('signin[_csrf_token]=' + token);
StrPage := IdHTTP1.Post(Url, Log);
if Pos(ansitoutf8('Велком!'), StrPage) <> 0 then showmessage('Добро пожаловать')
else
showmessage('Ошибка');
Log.Free;
Но при попытке авторизироваться, пишет ошибка HTTP/1.1 401 Unauthorized.
Не пойму что нужно сделать.
HTTP Analyzer выдал вот что:
Код:
Request Headers Value
(Request-Line) POST /login HTTP/1.1
Host joyreactor.cc
User-Agent Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding gzip, deflate
Referer http://joyreactor.cc/login
Cookie __utma=181973772.126570559.13468411 75.1371153093.1373369970.11; __utmz=181923772.1371113093.10.7.ut mcsr=go.mail.ru|utmccn=(organic)|ut mcmd=organic|utmctr=joyreactor; joyreactor=ver2ba21bd226380863fe1e6 21c664a16cca:29b9a9f37d055896677692 45a9f9b87f6d339644; __utmb=181924772.9.10.1373369970; __utmc=181923772
Connection keep-alive
Content-Type application/x-www-form-urlencoded
Content-Length 138
И в разделе Post Data:
Код:
Parameter Name Value
signin[username] Vasya
signin[_csrf_token] b04b6fb4f43c5b05a8f01ec4d40b452b
signin[remember] on
signin[password] Pupkin
Заранее спасибо за помощь.