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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2013, 11:55   #1
ClMlD
Форумчанин
 
Аватар для ClMlD
 
Регистрация: 09.07.2011
Сообщений: 185
По умолчанию Авторизация на сайте if pos

Добрый час что то я не как не могу понять по какому слову проверять вошел я или нет logaut не катит
вот мой код может что не так?

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  StrPage,Url:string;
  Log:TStringList;
begin
url:='http://stalker-online.so/account/';
Log:=TStringList.Create;
Log.Add('token=475015255fd10cd819ac8b4f9f1f2670');
Log.Add('name='+Edit1.Text);
Log.Add('pass='+Edit2.Text);
Log.Add('login=Вход');
StrPage:=IdHTTP1.Post(Url,Log);
if Pos('logaut',StrPage)<>0 then
ShowMessage('Добро пожаловать')
else
ShowMessage('Пароль неверный ! ! !');
Log.Free;
end;

end.
И параметр token что это разъясните пожалуйста
ClMlD вне форума Ответить с цитированием
Старый 12.01.2013, 12:05   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

Что такое "logaut"?
Arigato вне форума Ответить с цитированием
Старый 12.01.2013, 12:13   #3
ClMlD
Форумчанин
 
Аватар для ClMlD
 
Регистрация: 09.07.2011
Сообщений: 185
По умолчанию

Arigato о опять ваше внимание =) я вам уже много чем благодарен. Честно сказать я сам хз но обычно так все авторизуются я как понял это первая строка в StrPage или они наоборот сравниваются я вот сам и не понял откуда брать значение по которому нужно проверять логинелся я или нет?
ClMlD вне форума Ответить с цитированием
Старый 12.01.2013, 13:14   #4
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Скорее logout, а не logaut
Lardes вне форума Ответить с цитированием
Старый 12.01.2013, 15:04   #5
ClMlD
Форумчанин
 
Аватар для ClMlD
 
Регистрация: 09.07.2011
Сообщений: 185
По умолчанию

Lardes толку нет , вы можете мне объяснить функцию post как в данном случае мне найти то самое слово по которому я определю что я активировался? я просто не пойму как искать данный параметр, он же не с воздуха берется. Так же в силе вопрос что такое ('token=475015255fd10cd819ac8b4f9f1 f2670'); может данное значение рандомно или берется по какому то значения , поэтому нет активации , может именно из за этого параметра я не могу законектится ? в чем проблема то?

Последний раз редактировалось ClMlD; 12.01.2013 в 15:07.
ClMlD вне форума Ответить с цитированием
Старый 12.01.2013, 15:04   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Токен желательно "парсить":
Запрашиваем get'ом страницу http://stalker-online.so/account/.
"Выкусываем" строку между <input type="hidden" name="token" value=" и ">.

Я не силен в интернет-технологиях, но токен, скорее всего, характеризует Вашу сессию.
Что-то похожее http://ru.wikipedia.org/wiki/Токен_(авторизации).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 12.01.2013 в 15:13.
BDA вне форума Ответить с цитированием
Старый 12.01.2013, 15:12   #7
ClMlD
Форумчанин
 
Аватар для ClMlD
 
Регистрация: 09.07.2011
Сообщений: 185
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Токен желательно "парсить":
Запрашиваем get'ом страницу http://stalker-online.so/account/.
"Выкусываем" строку между <input type="hidden" name="token" value=" и ">.
Почему гет? если вроде бы пост? так как я просматривал в ручную страницу,
по материалу на данной теме в закрепленных темах об авторизации на сайтах это получается именно пост запрос , объясните пожалуйста я просто сам хочу понять и вникнуть в данную задачу

Если я вас правильно понял значения token все таки рандом и нужно значение token не вписывать в ручную а подгружать во время активации типо защита или что?

Последний раз редактировалось ClMlD; 12.01.2013 в 15:17.
ClMlD вне форума Ответить с цитированием
Старый 12.01.2013, 15:18   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Токен меняется (при обновлении страницы в браузере несколько раз он не меняется, но если сменить ip адрес, то он точно поменяется), поэтому нужно его как-то выяснить.
Сначала get запросом скачиваем страницу.
Затем достаем из нее токен.
Затем делаем post запрос с нужными логином и паролем и полученным токеном.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 12.01.2013, 15:23   #9
ClMlD
Форумчанин
 
Аватар для ClMlD
 
Регистрация: 09.07.2011
Сообщений: 185
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Токен меняется (при обновлении страницы в браузере несколько раз он не меняется, но если сменить ip адрес, то он точно поменяется), поэтому нужно его как-то выяснить.
Сначала get запросом скачиваем страницу.
Затем достаем из нее токен.
Затем делаем post запрос с нужными логином и паролем и полученным токеном.
Вот оно что у меня как раз динам ip а такой вопрос как все таки проверить конетк я или нет? или logout так и писать это стандарт?
И пожалустай если можно пример как мне достать этот token то есть нужно будет отшетать сколько то строчек потом до какого то символа потом только занести значение в переменную не могли бы мини пример или ссылку на статью так как даже не знаю как к гуглу обратиться

Последний раз редактировалось ClMlD; 12.01.2013 в 15:28.
ClMlD вне форума Ответить с цитированием
Старый 12.01.2013, 17:38   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
uses strutils;
...
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 := PosEx(end1, text, startpos);
  if endpos < 1 then
    exit;
  result := Copy(text, startpos, endpos - startpos);
end;

procedure SetCookies(HTTP: TIdHTTP);
var
  temp: TStringList;
  i: integer;
begin
  temp := TStringList.Create;
  HTTP.Response.RawHeaders.extract('Set-cookie', temp);
  HTTP.Request.CustomHeaders.text := 'Cookie: ';
  for i := 0 to temp.Count - 1 do
    HTTP.Request.CustomHeaders.text := HTTP.Request.CustomHeaders.text + Copy
      (temp.Strings[i], 1, Pos(';', temp.Strings[i]) - 1);
  temp.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  StrPage, Url, token: string;
  Log: TStringList;
begin
  Url := 'http://stalker-online.so/account/';
  StrPage := IdHTTP1.Get(Url);
  token := extract(StrPage, 'name="token" value="', '"');
  SetCookies(IdHTTP1);
  Log := TStringList.Create;
  Log.Add('token=' + token);
  Log.Add('name=' + Edit1.text);
  Log.Add('pass=' + Edit2.text);
  Log.Add('login=Вход');
  StrPage := IdHTTP1.Post(Url, Log);
  if Pos(ansitoutf8(
      'Вы успешно зашли. Через несколько секунд вы будете перенаправлены в личный кабинет.'), StrPage) <> 0 then
    showmessage('Добро пожаловать')
  else
    showmessage('Ошибка');
  Log.Free;
end;
Теперь некоторые пояснения.
Во-первых, предпочитаю индивидуальный подход к сайтам.
Опираться на поиск слова logout не всегда можно. Например, на сайте есть чат, в котором кто-нибудь напишет это слово, тогда будет неправильно определяться авторизация. В данном случае сайт оповещает об успешном заходе достаточно большой фразой, которую и нужно искать.
Во-вторых, у меня возникла проблема с тем, что idhttp не хотел сохранять cookies, которые приходили при первом get запросе, поэтому их пришлось добавлять с помощью самописной функции setcookies.
В-третьих, функция extract извлекает из строки значение токена.

Update
Упрощенный вариант, который предназначен только для данной авторизации:
Код:
uses strutils;
...
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 := PosEx(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://stalker-online.so/account/';
  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: s_id=' + extract(Log.text,
    's_id=', ';') + ';';
  Log.Clear;
  Log.Add('token=' + token);
  Log.Add('name=' + Edit1.text);
  Log.Add('pass=' + Edit2.text);
  Log.Add('login=Вход');
  StrPage := IdHTTP1.Post(Url, Log);
  if Pos(ansitoutf8(
      'Вы успешно зашли. Через несколько секунд вы будете перенаправлены в личный кабинет.'), StrPage) <> 0 then
    showmessage('Добро пожаловать')
  else
    showmessage('Ошибка');
  Log.Free;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 12.01.2013 в 19:19.
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Авторизация на сайте Florento Фриланс 3 25.11.2012 20:58
Авторизация на сайте rosljk Работа с сетью в Delphi 134 19.05.2012 11:12
Авторизация на сайте doniyor Работа с сетью в Delphi 1 18.04.2010 13:54
Авторизация на сайте Niklan Общие вопросы Delphi 1 07.11.2009 00:39
Авторизация на сайте Abadd0N Работа с сетью в Delphi 14 10.06.2009 12:31