Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2011, 22:43   #1
temchik2004
 
Регистрация: 28.11.2010
Сообщений: 8
По умолчанию Авторизация IdHTTP + virtuemart(joomla)

Нужна авторизация чтобы попасть в админку
Написал код, но он что-то не работает
Код:
procedure TForm1.Button1Click(Sender: TObject);
var params,responseres,first:tstringlist;
begin
params:=TStringList.Create;
responseres:=TStringList.Create;
first:=TStringList.Create;
try
ffirst.Text:=IdHTTP1.Get('http://localhost/administrator/index.php');
Memo1.Text:=first.Text;
params.Add('modlgn_username='+Edit1.Text);
params.Add('modlgn_passwd='+Edit2.Text);
responseres.Text:=IdHTTP1.Post('http://localhost/administrator/index.php',params);
Memo2.Text:=responseres.Text;
if Pos('logout',responseres.Text)>0 then
     begin
      ShowMessage('Окейно');
      end
  else
   ShowMessage('Error!');
finally
params.free;
responseres.free;
first.free;
end;
end;
Вроде-бы вводит данные, но вход не производит!
Код страницы админки
PHP код:
    <div id="element-box" class="login">
                <
div class="t">
                    <
div class="t">
                        <
div class="t"></div>
                    </
div>
                </
div>
                <
div class="m">

                    <
h1>Вход в административный раздел</h1>
                    
                            <
div id="section-box">
            <
div class="t">
                <
div class="t">
                    <
div class="t"></div>
                 </
div>
             </
div>
            <
div class="m">
                <
form action="index.php" method="post" name="login" id="form-login" style="clear: both;">
    <
p id="form-login-username">
        <
label for="modlgn_username">Логин</label>
        <
input name="username" id="modlgn_username" type="text" class="inputbox" size="15" />
    </
p>

    <
p id="form-login-password">
        <
label for="modlgn_passwd">Пароль</label>
        <
input name="passwd" id="modlgn_passwd" type="password" class="inputbox" size="15" />
    </
p>
        <
p id="form-login-lang" style="clear: both;">
        <
label for="lang">Язык</label>
        <
select name="lang" id="lang"  class="inputbox"><option value=""  selected="selected">По&nbsp;умолчанию</option><option value="en-GB" >English (United Kingdom)</option><option value="ru-RU" >Russian (CIS)</option></select>    </p>
    <
div class="button_holder">
    <
div class="button1">
        <
div class="next">
            <
a onclick="login.submit();">
                
Войти</a>

        </
div>
    </
div>
    </
div>
    <
div class="clr"></div>
    <
input type="submit" style="border: 0; padding: 0; margin: 0; width: 0px; height: 0px;" value="Войти" />
    <
input type="hidden" name="option" value="com_login" />
    <
input type="hidden" name="task" value="login" />
    <
input type="hidden" name="a82ef93bbea3c2b9266ec7ad9329bea7" value="1" /></form>
                <
div class="clr"></div>
            </
div>
            <
div class="b">
                <
div class="b">
                     <
div class="b"></div>
                </
div>
            </
div>
        </
div
Искал похожее на форуме решения не нашол!
Пожалуйста, помогите или укажите в чем я ошибаюсь!
temchik2004 вне форума Ответить с цитированием
Старый 01.02.2011, 09:36   #2
Mifody
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 215
По умолчанию

1. еще три скрытых переменных "потерялись"
2. уверены, что логин/пароль надо отправлять через modlgn_username и modlgn_passwd?

рекомендую отснифить, что отправляется при ручном логине и через программу. И сравнить - побыстрее разберетесь .
Помог с вопросом - тыркаем в весы, Вам не сложно, а мне приятно
Mifody вне форума Ответить с цитированием
Старый 04.05.2011, 20:24   #3
marco.v
 
Регистрация: 04.05.2011
Сообщений: 6
По умолчанию

Mifody: можешь помочь в продолжении этой темы? Такая же проблема и не получается у меня никак осуществить задуманное

Проблема с Invalid Token. Не знаешь, как обойти ?

Последний раз редактировалось marco.v; 04.05.2011 в 22:59.
marco.v вне форума Ответить с цитированием
Старый 05.05.2011, 09:05   #4
art-programs
Пользователь
 
Регистрация: 04.07.2009
Сообщений: 61
По умолчанию

Была такая же проблема с токеном.
Там проверка со скрытыми переменными (товарищ выше верно сказал).
Принцип такой:
гет"ом получаешь код страницы
потом в нём нужно спарсить скрытые переменные

Код:
<input type="hidden" name="option" value="com_login" /> 
    <input type="hidden" name="task" value="login" /> 
    <input type="hidden" name="a82ef93bbea3c2b9266ec7ad9329bea7" value="1" /></form>
а потом отправляешь все переменные серверу.
и конечно modlgn_username и modlgn_passwd не катит

вот код как делал я (это не админка, но принцип думаю тоже)

Код:
procedure TForm1.Button1Click(Sender: TObject);
var res,p1,p2,t:string; login,passw:string; st:TStringList;
begin
IdCookieManager1.CookieCollection.Clear;
st:=TStringList.Create;
login:=Edit1.Text;;
passw:=Edit2.Text;
st.Add('username='+login);
st.Add('passwd='+passw);
st.Add('Submit=Войти');
st.Add('option=com_user');
st.Add('task=login');
res:=IdHTTP1.Get('http://.ru');
p1:='<input type="hidden" name="return" value="';
p2:='" />';
Delete(res,1,pos(p1,res)-1+length(p1));
t:=Copy(res,1,Pos(p2,res)-1);
st.Add('return='+t);
p1:='<input type="hidden" name="';
p2:='" value="1" />';
Delete(res,1,pos(p1,res)-1+length(p1));
t:=Copy(res,1,Pos(p2,res)-1);
st.Add(t+'=1');
try
IdHTTP1.Post('http://.ru/index.php',st);
except
end;
res:=IdHTTP1.Get('http://.ru');
p1:='<input type="hidden" name="task" value="logout" />';
if pos(p1,res)>0 then
 ShowMessage('Авторизовано')
 else
 ShowMessage('Ошибка авторизации');
end;
art-programs вне форума Ответить с цитированием
Старый 05.05.2011, 09:58   #5
marco.v
 
Регистрация: 04.05.2011
Сообщений: 6
По умолчанию

делаю точно так же, но все-равно инвалид. токен.
ты IdCookieManager подключал ? у меня не включен.
marco.v вне форума Ответить с цитированием
Старый 05.05.2011, 10:23   #6
Mifody
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 215
По умолчанию

эээ, стоп "ты IdCookieManager подключал ? у меня не включен." а это почему так???
или потом работать не надо? просто авторизоваться?
и вообще снифер НТТР стоит? там еще редирект идет
Помог с вопросом - тыркаем в весы, Вам не сложно, а мне приятно
Mifody вне форума Ответить с цитированием
Старый 05.05.2011, 10:47   #7
marco.v
 
Регистрация: 04.05.2011
Сообщений: 6
По умолчанию

у меня такой код - очень похожий на код art-programs:

procedure TForm1.Button1Click(Sender: TObject);
var params,responseres,first:tstringlis t;
Find,str:string;
i:integer;
begin
params:=TStringList.Create;
responseres:=TStringList.Create;
first:=TStringList.Create;
try
first.Text:=IdHTTP1.Get('http://site.ru/administrator/index.php');
Memo1.Text:=first.Text;


find:='value="1"';
For i:=0 to Memo1.Lines.Count-1 do
If Pos(FIND, Memo1.Lines.Text)<>0
Then
str:=copy(memo1.lines.Text,pos(FIND ,Memo1.Lines.Te xt)-34,32);


params.Add('username='+'test');
params.Add('passwd='+'test');
params.Add('lang='+'');
params.Add('option='+'com_login');
params.Add('view='+'login');
params.Add(str+'=1');



responseres.Text:=IdHTTP1.Post('htt p://site.ru/administrator/index.php',params);

Memo2.Text:=responseres.Text;
if Pos('logout',responseres.Text)>0 then
begin
ShowMessage('OK');
end
else
ShowMessage('Error!');
finally
params.free;
responseres.free;
first.free;
end;
end;

по ходу дела, надо все-таки включить кукисы, только вот как это сделать? Добавил на форму IdCookieManager1, прописал ему, как у тебя CookieCollection.Clear; подключил его к idhttp1 , но все-равно error выдает.


проблема решена. Всем спасибо

Последний раз редактировалось marco.v; 05.05.2011 в 13:25.
marco.v вне форума Ответить с цитированием
Старый 26.06.2011, 11:22   #8
Arsenx777
Delphi, c++, php
Форумчанин
 
Аватар для Arsenx777
 
Регистрация: 14.03.2011
Сообщений: 288
По умолчанию

ты переменную не правильно записал
Код:
try
ffirst.Text:=IdHTTP1.Get('http://localhost/administrator/index.php');
Memo1.Text:=first.Text;
ffirst поменяй на first
Мудр тот, кто знает нужное, а не многое.

Arsenx777 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IdHTTP и авторизация celovec Работа с сетью в Delphi 4 06.12.2010 21:33
Динамический <title> в Virtuemart Joomla mike_jag WordPress и другие CMS 0 29.08.2010 01:11
Авторизация в админке Joomla-сайта DemonXT Работа с сетью в Delphi 0 14.12.2009 17:11
Авторизация через Idhttp xakkkkker Работа с сетью в Delphi 1 08.02.2009 17:10