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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2009, 21:13   #1
Kottik
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 47
По умолчанию Авторизоваться на IP.B

Здравствуйте
Требуется авторизоваться на форуме IP.B
Исходный код страницы:
Код:
<form action="http://forum.animekids.ru/index.php" method="post">
	<input type="hidden" name="act" value="Login" />
	<input type="hidden" name="CODE" value="01" />
	<input type="hidden" name="s" value="a8bd151f293e86c308384f14e77e05d6" />
	<input type="hidden" name="referer" value="http://forum.animekids.ru/index.php?act=UserCP&amp;CODE=00" />
	<input type="hidden" name="CookieDate" value="1" />
	<h4>Сейчас вы не авторизованы. Можете сделать это, используя форму ниже.</h4>
	<div class="fieldwrap">

<h4>Имя пользователя (login)</h4>
		<input type="text" size="20" maxlength="64" name="UserName" />

		<h4>Пароль</h4>
		<input type="password" size="20" name="PassWord" />
		<p class="formbuttonrow1"><input class="button" type="submit" name="submit" value="Войти!" /></p>
	</div>
</form>
Код:
Код:
procedure TForm1.Button4Click(Sender: TObject);
var params,responseres:tstringlist;
begin
params:=TStringList.Create;
responseres:=TStringList.Create;
try
params.Add('act=Login');
params.Add('CODE=01');
params.Add('referer=http://forum.animekids.ru/index.php?act=UserCP&amp;CODE=00');
params.Add('CookieDate=1');
params.Add('UserName=[тут реальный логин]');
params.Add('PassWord=[пароль]');
params.Add('submit=Войти!');
responseres.Text:=http1.Post('http://forum.animekids.ru/index.php',params);
if Pos('Выход',responseres.Text)>0 then
  ShowMessage('Авторизовались!');
finally
params.free;
responseres.free;
end;
end;
Может быть дело в
Код:
<input type="hidden" name="s" value="a8bd151f293e86c308384f14e77e05d6" />
сессиях?
Учиться никогда не поздно

Последний раз редактировалось Kottik; 19.08.2009 в 21:17.
Kottik вне форума Ответить с цитированием
Старый 20.08.2009, 16:15   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

начнем с малого.
1)версия инди?
2)куки менагер подключен?
3)(ответ на посл вопрос)
да в них тоже дело(99,9%)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.08.2009, 17:17   #3
Kottik
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
1)версия инди?
2)куки менагер подключен?
3)(ответ на посл вопрос)
да в них тоже дело(99,9%)
1) 10.2.5
2) (Можно подробнее? Я совсем новичок )
У компонента TIdHTTP свойство AllowCookies установлено в True.
Ниже вижу свойство CookieManager - он не установлен и выбрать не из чего. Отправляюсь в Google )

Дописано: в разделе IndyMisc вижу такой компонент)

Дописано: как пользоваться - пока не понял)
Учиться никогда не поздно

Последний раз редактировалось Kottik; 20.08.2009 в 17:25.
Kottik вне форума Ответить с цитированием
Старый 20.08.2009, 17:39   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)-
2)кинуть на форму и подключить его к HTTP
3)сначало получаем страницу потом парсим...а потом отправляем запрос на авторизацию
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.08.2009, 17:43   #5
Kottik
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
1)-
2)кинуть на форму и подключить его к HTTP
3)сначало получаем страницу потом парсим...а потом отправляем запрос на авторизацию
"1) -" по первому вопросу всё решено или то, что версия у меня такая - это "минус"?
Попробую понять, что Вы мне советуете)
Спасибо
Учиться никогда не поздно
Kottik вне форума Ответить с цитированием
Старый 20.08.2009, 17:48   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

не самая последня но десятка
так что все норм
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.08.2009, 00:54   #7
Kottik
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 47
По умолчанию

  1. Добавил на форму CookieManager.
  2. У TIdHTTP свойство CookieManager установил IdCookieManager1.
  3. Получаю страницу и загружаю её в memo1.
  4. При помощи подключенных RegExpr нахожу в тексте страницы "s".
  5. Вывожу его в memo1.
  6. Посылаем запрос.
  7. Текст из полученного StringList выводим в memo1, видим неправильную кодировку. Как исправить?
Читал сообщение, воспользоваться не получилось
К тому же и без кодировки вижу, что аутентификация НЕ прошла.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, RegExpr, IdCookieManager;

type
  TForm1 = class(TForm)
    b1GetPage: TButton;
    b2Parsing: TButton;
    b3Post: TButton;
    Memo1: TMemo;
    http1: TIdHTTP;
    IdCookieManager1: TIdCookieManager;
    procedure b1GetPageClick(Sender: TObject);
    procedure b2ParsingClick(Sender: TObject);
    procedure b3PostClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  s:string;

implementation

{$R *.dfm}

procedure TForm1.b1GetPageClick(Sender: TObject);
var stream : TMemoryStream;
begin
stream := TMemorystream.Create;
http1.Get('http://forum.animekids.ru/index.php?act=UserCP&CODE=00',stream);
stream.Position := 0;
memo1.Lines.LoadFromStream(stream);
end;

procedure TForm1.b2ParsingClick(Sender: TObject);
var
RegExp:TRegExpr;
begin
RegExp := TRegExpr.Create;
try
RegExp.Expression:= '<input type="hidden" name="s" value="(.*?)" />';
    if RegExp.Exec(memo1.Text) then begin
      memo1.Clear;
      s:=RegExp.Match[1];
      memo1.lines.add(RegExp.Match[1]);
    end;
finally
  RegExp.Free;
end;
end;

procedure TForm1.b3PostClick(Sender: TObject);
var params,responseres:tstringlist;
ref,ses:string;
begin
ref:='';
ses:='';
ses:='s='+s;
ref:='referer='+'http://forum.animekids.ru/index.php?s='+s+'&amp;amp;act=UserCP&amp;CODE=00';
params:=TStringList.Create;
responseres:=TStringList.Create;
try
params.Add('act=Login');
params.Add('CODE=01');
params.Add(ses);
params.Add(ref);
params.Add('CookieDate=1');
params.Add('UserName=test');
params.Add('PassWord=test');
params.Add('submit=Войти!');
memo1.text:=params.Text;
responseres.Text:=http1.Post('http://forum.animekids.ru/index.php',params);
memo1.Text:=responseres.Text;
if Pos('Личные',responseres.Text)>0 then
  ShowMessage('Авторизовались!');
if Pos('Вход',responseres.Text)>0 then
  ShowMessage('Не авторизовались!');
  finally
params.free;
responseres.free;
end;
end;
end.
Учиться никогда не поздно

Последний раз редактировалось Kottik; 21.08.2009 в 13:40.
Kottik вне форума Ответить с цитированием
Старый 21.08.2009, 01:13   #8
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

ну а что мешает посмотреть оригинальный запрос и ваш и посмотреть в чем разница ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 21.08.2009, 01:18   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
procedure Tmain_form.httpClick(Sender: TObject);
var
stream: tStream;
strings: tStringList;
begin
   stream := tMemoryStream.Create;
   try
   idHTTP1.Get('http://programmersforum.ru/showthread.php?t=60677', stream);
   stream.Position := 0;
   strings := tStringList.Create;
   strings.LoadFromStream(stream);
   memo1.Lines.Assign(strings);
   strings.Free;
   finally
   stream.Free;   
   end;
end;
а если так получать то с кодировкой норм должно быть

вот же реферер...а вы какой ставите?
самый лучший совет тут...просниферите запрос из браузера и посмотрите(и можно еще сравнить с вашей прогой)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.08.2009, 07:24   #10
Kottik
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 47
По умолчанию

Когда прога получает страницу, то
Цитата:
<input type="hidden" name="referer" value="http://forum.animekids.ru/index.php?amp;act=UserCP&amp;CODE=0 0" />
Тут, в цитате выше, прямо над этой моей строкой s есть. Но почему то движок форума убирает. Думал, что ошибся и не ту ссылку вставил, попробовал ещё два раза - всё также, что в [code], что в [quote].
В общем, когда программа получает страницу, s присутствует в referer, а в браузере через раз: то есть s в referer, то нету.

Цитата:
Сообщение от Квэнди Посмотреть сообщение
ну а что мешает посмотреть оригинальный запрос и ваш и посмотреть в чем разница ?
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
самый лучший совет тут...просниферите запрос из браузера и посмотрите(и можно еще сравнить с вашей прогой)
Кажется, вы об одном и том же говорите. Сходил в Википедию, узнал, что такое снифер. Не знаю, правильно ли поступил, единственное что на ум пришло - посмотреть в FireFox при помощи дополнения "Просмотр HTTP заголовков".
Вот что там узрел:
Цитата:
act=Login&CODE=01&referer=http%3A%2 F%2Fforum.animekids.ru%2Findex.php% 3Fact%3DUserCP%26CODE%3D00&CookieDa te=1&UserName=test&PassWord=test&su bmit=%C2%EE%E9%F2%E8%21
Сейчас ухожу, вернусь примерно в 14 по московскому, попробую разобраться с вашими советами.
Большое спасибо.
Учиться никогда не поздно

Последний раз редактировалось Kottik; 21.08.2009 в 07:28.
Kottik вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не авторизоваться на сайтах. Kaunaz Помощь студентам 2 20.07.2009 19:31
Как авторизоваться на сайте? AngelOfDeath Работа с сетью в Delphi 5 22.09.2008 12:35
Не могу авторизоваться на HTTPS Yuran Работа с сетью в Delphi 11 18.04.2008 14:19