PDA

Просмотр полной версии : [Статья] Авторизация на сайте с помощью Indy. Delphi.


VeTaL_UA
24.09.2011, 16:10
Доброго времени суток!

В этой статье я попробую научить вас авторизоваться на сайте dump.ru с помощью Indy.

Что нам нужно для работы:

Delphi любой версии. Ссылки на скачку:

Delphi 7(deposit ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),torrent ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));
Delphi 2010(deposit ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),torrent ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));
Delphi XE(deposit ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),torrent ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));

Charles любой версии. Ссылка на скачку:

Charles 3.5.2(deposit ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),torrent ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));

Учётная запись на сайте dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи]);
Желание;


Ну что же, если все пункты присутствуют можно начать.



Переходим на сайт dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи]). Вы не должны быть авторизованы на сайте! Если вы авторизованы на сайте, тогда выйдите со своего профиля.
Включаем Charles. Ждем пока он включится и, когда он включился, нажимаем на кнопочку:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Должен засветится красный огонёк посередине кнопочки:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
В дальнейшем я буду называть эту кнопку кнопкой "Запись", а её состояние на первом рисунке - выключенной, на втором - включенной.
Переходим в окно браузера и авторизуемся на сайте dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи]), поставив галочку "запомнить". Когда авторизовались, выходим из своего профиля. Когда вышли из профиля, заново авторизуемся, только уже не ставим галочку "запомнить". Зачем столько раз авторизоваться вы поймете позже.
Теперь переходим в окно Charles и выключаем "Запись".
Теперь мы можем переходить к анализу полученных данных. В поле вкладки "Structure" должны были появится адреса сайтов:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Из этих адресов, нас интересует только "[Ссылки могут видеть только зарегистрированные и активированные пользователи]". Кликаем на нем:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Теперь поясню что же появилось:

Первый <default> - это наша первая авторизация(с галочкой), точнее запрос на нее;
Второй <default> - это запрос выхода из профиля;
Третий <default> - это запрос на последнюю авторизацию(без галочки).

Зачем нам было три запроса:

В первом и третьем мы будем сравнивать "Request", чтобы узнать как он зависит от галочки "запомнить";
Во первом и втором мы будем сравнивать "Response", чтобы узнать разницу в ответе сервера в случаях, когда пользователь авторизован и когда не авторизован.

Теперь выбираем первый <default> и переходим на вкладку "Request":
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
После этого проделываем те же действия с третьим <default>'ом:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Теперь анализируем два Request'а. В первом запросе(с галочкой) есть поле auth_remember, а во втором нету.
Теперь приступаем к анализу Response'ов первого(авторизации) и второго(выхода) <default>'ов. Для этого выбираем первый <default> и переходим на вкладку "Response":
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
После этого проделываем те же действия с вторым <default>'ом:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Теперь анализируем два Response'а. В этой части мы поиграем в игру "найди 10 отличий", только нам будет достаточно и одного... Как мы видим на скрине, два Response'а отличаются строкой:
<!-- profile [Ссылки могут видеть только зарегистрированные и активированные пользователи] -->
Это нам и было нужно.

Теперь, когда мы собрали всю нужную информацию, можно приступать к написанию кода.


Теперь мы приступаем к написанию кода.

Запускаем делфи;
Кидаем на форму два компонента Edit, один компонент Button и один компонент CheckBox из вкладки "Standart":
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Кидаем на форму один компонент IdHTTP из вкладки "Indy Clients":
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Создаем обработчик событий OnClick на компоненте Button(два раза кликаем по Button'у);
Обьявляем переменные типа TStringList, String и TIdHTTP в процедуре нажатия на кнопку:
var
Data:TStringList;
Request:String;
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Теперь нам нужно написать исполняемый код.Но для этого надо знать, что писать:


Для начала нам нужно создать TStringList и TId[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Data:=TStringList.Create;
[Ссылки могут видеть только зарегистрированные и активированные пользователи](nil);
Теперь нам нужно заполнить TStingList данными из Request'а, но мы не должны забывать, что поле "auth_remember" должно добавлятся только тогда, когда у нас стоит галочка "запомнить". В нашей программе e-mail мы будем вводить в Edit1, а пароль в Edit2, по этому код будет такой:
Data.Add('auth_login='+Edit1.Text);
Data.Add('auth_password='+Edit2.Text);
if CheckBox1.Checked then
begin
Data.Add('auth_remember=ok');
end;
Теперь нам нужно отправить запрос на сайт dump.ru с данными в TStringList'е, подгружая Response в String:
Request:=[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]',Data);
На предыдущем этапе можно и завершить авторизацию, но как же узнать авторизовались мы, или нет? Для этого мы и искали отличия в Response. Мы помним, что при удачной авторизации в Response появлялась строка.
<!-- profile [Ссылки могут видеть только зарегистрированные и активированные пользователи] -->
В этой строке "Statia" - это название учётной записи. Для проверки можно выбрать только кусочек этой строки
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
По этому у нас получится такой код:
if Pos('[Ссылки могут видеть только зарегистрированные и активированные пользователи]',Request)<>0 then
begin
ShowMessage('Авторизация прошла успешно');
end
else
begin
ShowMessage('Авторизация не удалась');
end;
Ну и под конец нам нужно очистить переменные для того, чтобы авторизоватся можно было много раз:
Data.Free;
Request:='';
[Ссылки могут видеть только зарегистрированные и активированные пользователи]


Полный код процедуры нажатия на кнопку:
procedure TForm1.Button1Click(Sender: TObject);
var
Data:TStringList;
Request:String;
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
begin
Data:=TStringList.Create;
[Ссылки могут видеть только зарегистрированные и активированные пользователи](nil);
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)';
Data.Add('auth_login='+Edit1.Text);
Data.Add('auth_password='+Edit2.Text);
if CheckBox1.Checked then
begin
Data.Add('auth_remember=ok');
end;
try
Request:=[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]',Data);
if Pos('[Ссылки могут видеть только зарегистрированные и активированные пользователи]',Request)<>0 then
begin
ShowMessage('Авторизация прошла успешно');
end
else
begin
ShowMessage('Авторизация не удалась');
end;
finally
Data.Free;
Request:='';
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
end;
end;

Теперь, когда мы закончили написание программы, запускаем программу и смотрим, что получилось.

Скачать исходник(1 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]*********/fd21993),2 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),3 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),4 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),5 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));
Скачать скриншоты(1 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]*********/fd21994),2 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),3 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),4 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),5 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));

Статья писалась VeTaL_UA для Zhyk.RU. При копировании указывать ссылку на данную тему.

Рэйзор
24.09.2011, 16:25
tidhttp лучше создавать динамически.
и обязательно менять юзер агент:
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)';

VeTaL_UA
24.09.2011, 16:34
tidhttp лучше создавать динамически.
Добавил:
var
...
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
begin
[Ссылки могут видеть только зарегистрированные и активированные пользователи](nil);
...
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
end;
и обязательно менять юзер агент:
Добавил.

Спасибо за дополнение.

VeTaL_UA
09.04.2012, 20:17
шамиль, почему я не вижу ошибки?

GaZer
13.04.2012, 20:06
А можно сделать чтобы капчу выводил тоже. Просто для форума wot хочу сделать, а там капча...

VeTaL_UA
13.04.2012, 21:12
А можно сделать чтобы капчу выводил тоже.
В этом тебе помогут эта(1) ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) и эта(2) ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) статьи. Первая поможет спарсить ссылку на капчу (обязательно смотри комментарии к этой теме), а вторая поможет вывести капчу в компонент TImage.
Желаю успехов :)

_KastA_
05.02.2014, 18:17
Попробывал сделать с сайтом rghost.ru. Выдает эту ошибку.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Что я делаю не так?

MembRupt
06.02.2014, 16:46
Попробывал сделать с сайтом rghost.ru. Выдает эту ошибку.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Что я делаю не так?
Похоже неправильно указали ссылку, лучше покажите код

Добавлено через 4 минуты
у меня вопрос : по таким материалам что у вас есть это можно применить к [Ссылки могут видеть только зарегистрированные и активированные пользователи]

Можете, сайт dump.ru взят для примера. Только нужно будет исследовать процесс авторизации на вашем сайте, чтобы понять, как сформировать правильное "общение" программы с сайтом

Cantinier
03.03.2014, 23:31
А как можно это обойти? Он не возвращает Html код

Yukikaze
04.03.2014, 00:32
Он не возвращает Html код
302 Found - это редирект, обработай его

NebesaBag
04.03.2014, 04:42
А как можно это обойти? Он не возвращает Html код

Во-первых он говорит о редиректе.
Во-вторых он куки даёт.

делай так

try
Id[Ссылки могут видеть только зарегистрированные и активированные пользователи]('эта ссылка');
except
тут читаешь/записываешь куки через Id[Ссылки могут видеть только зарегистрированные и активированные пользователи]
end;
а тут уже с другой ссылкой работаешь используя полученные куки

Код написан по памяти, допустимы синтактические ошибки.

NUBOREZKA2012
22.11.2014, 16:06
Лично мой совет - переходите на синапс(Synapse). С прокси работает он быстрее чем инди, да и вообще, на мой взгляд, он проще и функциональнее. Ну хотя насчет проще не уверен. Начинающему может быть с ним трудно будет работаться, но обучится не так уж и трудно. Простой пример:
Писал накрутчик через прокси. Срау написал на инди - жутко медленно все работало, даже с быстрыми прокси. Переписал на синапсе - летает

\PaLaDin/
11.01.2015, 16:02
На многих сайтах используется JS и пост запрос отправляется уже на готовую ссылку. Для меня все печально

VeTaL_UA
11.01.2015, 20:01
На многих сайтах используется JS и пост запрос отправляется уже на готовую ссылку. Для меня все печально
Интерпретируй javascript либо переводи на свой ЯП :)(