Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Авторизация через idHTTP (indy) на WordPress


Автор: MyIE 30.4.2010, 20:22
Код

var
params: TStringList;
response: string;
begin
params:=TStringList.Create;
try
params.Add('log=LOGIN');
params.Add('pwd=PASSWORD');
params.Add('redirect_to=http://www.mysite.com/wp-admin/');
params.Add('testcookie=1');
response:= IdHTTP1.Get('http://www.mysite.com/wp-login.php'); {сказали для WordPress нужно сначала сделать get, чтобы получить куки, но пробовал и без этого, эффект тот же}
response:= IdHTTP1.Post('http://www.mysite.com/wp-login.php', params);
if Pos('Log Out', response)>0 then
  PanelStatus.Caption:= 'Авторизация прошла успешно.'
  else
  PanelStatus.Caption:= 'Авторизация не прошла.';
end;

Но в админку WordPress не заходит. (нужно заметить, что код рабочий, т.к. на mail.ru он авторизует => Проблема из-за Word Press'а)
Тут, кстати, переменная response вообще не заполняется.
Код

<form name="loginform" id="loginform" action="http://www.mysite.com/wp-login.php" method="post">
<label>Username<br />
<input type="text" name="log" id="user_login" class="input" value="" size="20" tabindex="10" />
</label>
<label>Password<br />
<input type="password" name="pwd" id="user_pass" class="input" value="" size="20" tabindex="20" />
</label>
<label>
<input name="rememberme" type="checkbox" id="rememberme" value="forever" tabindex="90" /> Remember Me</label>
<input type="submit" name="wp-submit" id="wp-submit" class="button-primary" value="Log In" tabindex="100" />
<input type="hidden" name="redirect_to" value="http://www.mysite.com/wp-admin/" />
<input type="hidden" name="testcookie" value="1" />
</form>

Может кто-то привести работающий пример кода авторизации через indy на WordPress'е (хорошобы с комментами).

Автор: Proxin 30.4.2010, 20:38
firefox + livehttpheaders. сами пробуйте разбираться.

Автор: MyIE 30.4.2010, 20:41
Если честно, то я в indy новичек и не знаю, как пользоваться сниферами

Автор: Proxin 30.4.2010, 21:24
новичёк четай, как пользоваться инди в интернете полно примеров ну правда, и, подучи правила русскага, языка
upd.
livehttpheaders - плагин для firefox. скачать его можно прямо из браузера (инструменты->дополнения). там есть инструкция, разберётесь.
а примеров аторизации по инди полно. к примеру, поищите мою рабочую авторизацию вконтакте, тут где-то на форуме лежала.

Автор: MyIE 30.4.2010, 21:29
Примеров авторизации полно.. Но я же грю, что я авторизовываюсь на мейле => код рабочий, проблема в Word Press, для него нужно что-то дополнительное сделать, что-то не стандартное. Вот в этом и проблема.

Автор: Proxin 30.4.2010, 23:32
Системы авторизации у разных сайтов, как правило, разные, и нужно индивидуально искать подход к каждому.

Автор: HoZeY 1.5.2010, 13:04
Во-первых:

Ты передаешь не все параметры.

Ты посылаешь:
Код

...
params.Add('log=LOGIN');
params.Add('pwd=PASSWORD');
params.Add('redirect_to=http://www.mysite.com/wp-admin/');
params.Add('testcookie=1');
...


А нужно отправить:
Код

post.Add('log=LOGIN');
post.Add('pwd=PASSWORD');
post.Add('rememberme=forever');
post.Add('wp-submit=Войти');
post.Add('redirect_to=http://mysite.com/wp-admin/');
post.Add('testcookie=1');


Во-вторых
Если пароль содержит символы ! " ? $ % ^ & ), то регистрация не проходит.

Вот рабочий код:
Код

var
post:TStringList;
result:string;
begin
post:=TStringList.Create;
try
// Параметры

post.Add('log=admin');
post.Add('pwd=123456');
post.Add('rememberme=forever');
post.Add('wp-submit=Войти');
post.Add('redirect_to=http://site.net/wp-admin/');
post.Add('testcookie=1');

// Отправляем данные
result:=IdHTTP1.Post('http://site.net/wp-login.php', post);

// Результат
if Pos('action=logout', result)>0 then
MessageDlg('Авторизация прошла успешно!', mtInformation, [mbOK],0)
else
MessageDlg('Авторизация Провалилась!', mtInformation, [mbOK],0);

except
post.Free;

end;

Автор: MyIE 2.5.2010, 17:24
Не авторизует ;(

Автор: HoZeY 3.5.2010, 13:09
Цитата(MyIE @ 2.5.2010,  17:24)
Не авторизует ;(

У меня авторизация проходит. смотри у себя что тебе нужно передать на сервер. Что-то может отличаться

Автор: MyIE 3.5.2010, 18:26
Даже специально на денвер поставил Word Press, не авторизует ;)

Автор: MyIE 3.5.2010, 19:08
Прикрепляю свой проект. Посмотри плиз.
И сначала попробуй просто exe_шником авторизовать, а потом уже перекомпилиоуй его своим делфи. Я хочу узнать, будет ли разница, мб у меня indy глючный...

Автор: HoZeY 7.5.2010, 00:08
Цитата(MyIE @ 3.5.2010,  19:08)
Прикрепляю свой проект. Посмотри плиз.
И сначала попробуй просто exe_шником авторизовать, а потом уже перекомпилиоуй его своим делфи. Я хочу узнать, будет ли разница, мб у меня indy глючный...

Я код свой писал в RAD Studio 2009 (Indy 10.2.5)
Успешно проходит авторизация и моим кодом и твоим.

Потом поставил RAD Studio 2010 (Indy 10.5.x непомню точно так как снес ее)
В данном случае авторизация не проходит ни твоим кодом ни моим.

Проблема в Indy....

Автор: MyIE 8.5.2010, 09:28
Большое спасибо, поставил д2009, все работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)