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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2013, 10:23   #1
Amilman
Пользователь
 
Регистрация: 19.12.2012
Сообщений: 49
Вопрос Авторизация на сайте. Проблема с Token.

Всем доброго времени суток. Хочу зайти насайт через свою програму. но как выяснилось для авторизации на сайте сайт генерирует 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;
Но при попытке авторизироваться, пишет ошибка 401.

Заранее спасибо за помощь.

Последний раз редактировалось Amilman; 09.07.2013 в 10:25.
Amilman вне форума Ответить с цитированием
Старый 09.07.2013, 12:01   #2
Usov
Форумчанин
 
Аватар для Usov
 
Регистрация: 29.09.2009
Сообщений: 228
По умолчанию

Найди в инете и установи снифер, например HTTP Analyzer.
И сравни им что шлет браузер и твоя прога. И тебе сразу все станет ясно.

Последний раз редактировалось Usov; 09.07.2013 в 12:03.
Usov вне форума Ответить с цитированием
Старый 09.07.2013, 12:58   #3
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Amilman, обрати внимание на этот участок кода:
Код:
token := extract(StrPage, 'name="token" value="', '"');
Скорее всего должно быть так:
Код:
token := extract(StrPage, 'name="signin[_csrf_token]" value="', '"');
Lardes вне форума Ответить с цитированием
Старый 09.07.2013, 13:06   #4
Amilman
Пользователь
 
Регистрация: 19.12.2012
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Lardes Посмотреть сообщение
Amilman, обрати внимание на этот участок кода:
Код:
token := extract(StrPage, 'name="token" value="', '"');
Скорее всего должно быть так:
Код:
token := extract(StrPage, 'name="signin[_csrf_token]" value="', '"');
Всё таже ошибка 401
Amilman вне форума Ответить с цитированием
Старый 09.07.2013, 16:28   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

снифером воспользуйтесь таки.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.07.2013, 17:23   #6
Amilman
Пользователь
 
Регистрация: 19.12.2012
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
снифером воспользуйтесь таки.
Вот:
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
Amilman вне форума Ответить с цитированием
Старый 09.07.2013, 19:49   #7
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Amilman, а результат отправки программы где?

Уверен, что куки отправляются? А также, что самое немаловажное, это отправка закодированных данных. То есть:
Код:
signin%5Busername%5D=Vasya&signin%5Bpassword%5D=Pupkin&signin%5Bremember%5D=on&signin%5B_csrf_token%5D=b04b6fb4f43c5b05a8f01ec4d40b452b
Lardes вне форума Ответить с цитированием
Старый 09.07.2013, 22:26   #8
Amilman
Пользователь
 
Регистрация: 19.12.2012
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Lardes Посмотреть сообщение
Amilman, а результат отправки программы где?

Уверен, что куки отправляются? А также, что самое немаловажное, это отправка закодированных данных. То есть:
Код:
signin%5Busername%5D=Vasya&signin%5Bpassword%5D=Pupkin&signin%5Bremember%5D=on&signin%5B_csrf_token%5D=b04b6fb4f43c5b05a8f01ec4d40b452b

А как по другому передать куки, потому что я не уверен что они передаются..
Amilman вне форума Ответить с цитированием
Старый 09.07.2013, 22:48   #9
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Поиск по форуму что, не дал плоды? Куча тем с передачей куков. Как лучшее решение для твоего вопроса, настоятельно рекомендую изучить Synapse. Из его плюсов это то, что совсем не заботишься о куках. Достаточно сделать get-запрос и куки уже у тебя

UPD: для ознакомления смотри пример

Последний раз редактировалось Lardes; 09.07.2013 в 22:57.
Lardes вне форума Ответить с цитированием
Старый 12.07.2013, 07:22   #10
Amilman
Пользователь
 
Регистрация: 19.12.2012
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Lardes Посмотреть сообщение
Поиск по форуму что, не дал плоды? Куча тем с передачей куков. Как лучшее решение для твоего вопроса, настоятельно рекомендую изучить Synapse. Из его плюсов это то, что совсем не заботишься о куках. Достаточно сделать get-запрос и куки уже у тебя

UPD: для ознакомления смотри пример

Теперь пишет ошибка 404 =\
token вроде как передает и куки тоже.
Amilman вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Авторизация на сайте sanco Работа с сетью в Delphi 3 17.03.2013 21:40
Авторизация на сайте (проблема с Cookie) ZverBlin Работа с сетью в Delphi 1 25.03.2012 18:56
Авторизация на сайте MultiBit Работа с сетью в Delphi 6 13.03.2009 18:45
Авторизация на сайте gusluk Работа с сетью в Delphi 3 20.11.2008 14:40
Авторизация на сайте vladimirzzz Работа с сетью в Delphi 7 28.09.2008 21:59