Delphi – Indy (видеоурок). Авторизация на одноклассниках
21 января 2010
Первый видеоурок по Delphi посвящен авторизации на сайте средствами Indy. В качестве примера я взял сайт “Одноклассники.ру“. Для авторизации на нем, как это бывает довольно-таки часто, нужно сделать два запроса: первый на главную страницу, спарсить адрес для авторизации и уже по нему сделать второй запрос с посылкой всех параметров (логин и пароль).
Очень круто) спасиб большое, на днях попробую повторить, раньше пробовал хелловорд на дельфи писать, вроде что-то получалось) объясняешь хорошо, микрофон тоже норм, ты ведь тут не реп поешь) еще раз большое спасибо за урок!
такс 2 вопроса очень нубских) я решил попробовать сделать тоже самое но для вконтакте) естественно ничего не получилось) по первых, дельфи не дает запустить мой чудо код выделяя красным “StrPage:=idhttp1.Get(‘http://vkontakte.ru/login.php‘);”
Ну и вопрос : если у меня в http аналайзере во вкладке “Post data” в графе “Parameter name” стоит параметр типа “expire”, а в “Value” пусто. Я написал просто Data.Add(‘expire=’); но по ходу это не правильно)
1) я не взял ВКонтакте в качестве примера, потому что там не столь простая авторизация)) К тому же часто меняется
2) в строке “StrPage:=idhttp1.Get(’http://vkontakte.ru/login.php’);” как таковой ошибки нет. Надо смотреть, что пишет компилятор.
3) чаще всего, если параметр пустой, то его писать не обязательно (хотя попадался мне случай и обязательного пустого параметра).
Про авторизацию ВКонтакте можно почитать здесь: http://avtuh.ru/2010/05/12/delphi-indy-avtorizaciya-vkontakte.html
HenzO, могу предположить, что у тебя переменная неправильно объявлена, или не объявлена вовсе. Или же idhhtp1 не создан (idhttp1:=TIdHTTP.Create;)
в любом случае, когда дельфи что-то выделяет красным, надо прислушиваться и к тому, что он пишет про ошибку
Точно также, как и одну) Указать, что идет до ссылки и чем заканчивается.
Если префикс у ссылок одинаковый, то нужно удалять уже пропарсенную часть процедурой Delete
Незря набрел на страницу..
Хотя все это я давно знал, но вот что в этом сниффере можно один процесс выбирать пропустил как-то, хотя использую его уже год…
А так раздражает когда во время отладки всякая ненужная хрень лезет в инет
Кстати, эти ненужность параметров можно было показать наглядно, отключив javascript в браузере.
И параметры проще брать в Raw Stream одной строкой и присваивать Data.Text := …; Ну это уже дело привычки
Да, можно и скрипты и картинки отключать, но иногда лень это делать)
Параметры да, можно и одной строкой, то так лично мне нагляднее, когда приходится много параметров заполнять
Zdez Bil Ya, Прошу скажите что не так
Build
[Warning] Unit1.pas(86): For loop control variable must be simple local variable
[Error] Unit1.pas(109): Undeclared identifier: ‘idhttp1′
[Error] Unit1.pas(110): Undeclared identifier: ‘Pars’
[Error] Unit1.pas(120): Missing operator or semicolon
[Fatal Error] Project1.dpr(5): Could not compile used unit ‘Unit1.pas’
Пожалуйста…
Спасибо, все работает. Кстати, кто любит сжатый код – вот алтернативная замена функции поиска адреса для отправки POST запроса:
Str:= Copy(Page, Pos(‘<form action="', Page) + 14,
Pos('method="post"', Page) – Pos('<form action="', Page) – 16);
Это какая версия delphi?
По поводу функции Pars, видел её на граббе, если использовать PosEx, то количество copy уменьшится до одного раза
[Ответить]
Zdez Bil Ya Reply:
января 21, 2010 at 13:33
Delphi 2010 (подойдет любая)))
Но я не стал, ибо это надо еще одну библиотеку подключать))
Да, можно использовать PosEx
[Ответить]
Очень круто) спасиб большое, на днях попробую повторить, раньше пробовал хелловорд на дельфи писать, вроде что-то получалось) объясняешь хорошо, микрофон тоже норм, ты ведь тут не реп поешь) еще раз большое спасибо за урок!
[Ответить]
такс 2 вопроса очень нубских) я решил попробовать сделать тоже самое но для вконтакте) естественно ничего не получилось) по первых, дельфи не дает запустить мой чудо код выделяя красным “StrPage:=idhttp1.Get(‘http://vkontakte.ru/login.php‘);”
Ну и вопрос : если у меня в http аналайзере во вкладке “Post data” в графе “Parameter name” стоит параметр типа “expire”, а в “Value” пусто. Я написал просто Data.Add(‘expire=’); но по ходу это не правильно)
[Ответить]
Zdez Bil Ya Reply:
января 22, 2010 at 04:59
1) я не взял ВКонтакте в качестве примера, потому что там не столь простая авторизация)) К тому же часто меняется
2) в строке “StrPage:=idhttp1.Get(’http://vkontakte.ru/login.php’);” как таковой ошибки нет. Надо смотреть, что пишет компилятор.
3) чаще всего, если параметр пустой, то его писать не обязательно (хотя попадался мне случай и обязательного пустого параметра).
Про авторизацию ВКонтакте можно почитать здесь: http://avtuh.ru/2010/05/12/delphi-indy-avtorizaciya-vkontakte.html
[Ответить]
HenzO, могу предположить, что у тебя переменная неправильно объявлена, или не объявлена вовсе. Или же idhhtp1 не создан (idhttp1:=TIdHTTP.Create;)
в любом случае, когда дельфи что-то выделяет красным, надо прислушиваться и к тому, что он пишет про ошибку
[Ответить]
Не легче снифером смотреть запрос, чем в исходном коде смотреть?
[Ответить]
Zdez Bil Ya Reply:
января 22, 2010 at 22:02
Запрос я и смотрю снифером. А в исходном коде я смотрю, где располагается ссылка для авторизации
[Ответить]
Спасибо! Замечательный урок!
[Ответить]
подскажи пример как выпарсить не одну а н количество ссылок этой функцией, спс
[Ответить]
Zdez Bil Ya Reply:
февраля 10, 2010 at 18:16
Точно также, как и одну) Указать, что идет до ссылки и чем заканчивается.
Если префикс у ссылок одинаковый, то нужно удалять уже пропарсенную часть процедурой Delete
[Ответить]
Как бысть если мне нужно авторизироватся на DLE?
[Ответить]
Zdez Bil Ya Reply:
июня 14, 2010 at 20:18
Так же, как в уроке. Берёте снифер и смотрите запросы, а потом пишете
[Ответить]
и еще… скачал исходник запустил без изменений ошибка
в строке
Application.MainFormOnTaskbar := True;
[Error] Project1.dpr(11): Undeclared identifier: ‘MainFormOnTaskbar’
[Ответить]
Zdez Bil Ya Reply:
июня 14, 2010 at 20:19
Закомментируйте
[Ответить]
Незря набрел на страницу..
Хотя все это я давно знал, но вот что в этом сниффере можно один процесс выбирать пропустил как-то, хотя использую его уже год…
А так раздражает когда во время отладки всякая ненужная хрень лезет в инет
Кстати, эти ненужность параметров можно было показать наглядно, отключив javascript в браузере.
И параметры проще брать в Raw Stream одной строкой и присваивать Data.Text := …; Ну это уже дело привычки
[Ответить]
Zdez Bil Ya Reply:
июня 23, 2010 at 22:50
Да, можно и скрипты и картинки отключать, но иногда лень это делать)
Параметры да, можно и одной строкой, то так лично мне нагляднее, когда приходится много параметров заполнять
[Ответить]
Перепиши, плиз, пример. Авторизация сменилась, пример не рабочий
[Ответить]
Zdez Bil Ya Reply:
июля 6, 2010 at 20:26
Исходный код открыт, видео лишь объясняет последовательность действий. Не вижу проблем самому проделать действия, и изменить код
[Ответить]
Ссылка логина в исходнике страницы отсутствует, потому и прошу переписать исходник))
[Ответить]
Zdez Bil Ya Reply:
июля 7, 2010 at 12:50
Ничего подобного, всё там есть
[Ответить]
Мне интересно чё ето видео в сети везде стоит Автор: sXciNe.
Так или нет ?
[Ответить]
Zdez Bil Ya Reply:
августа 28, 2010 at 23:24
Что так или нет?
Видео записывал я, голос мой, копирайт внизу слева тоже вроде мой
[Ответить]
Гугл , запрос :sXciNe (с) Авторизация на одноклассниках
[Ответить]
Zdez Bil Ya Reply:
августа 28, 2010 at 23:29
Я не понимаю, что вас смущает. Я еще раз говорю, что видео моё, копирайты в нем мои. Никакого sXciNe я знать не знаю. Задавайте ему вопросы
[Ответить]
Спасибо большое!!! Давно искал что-то подобное
[Ответить]
Добрый день.
отличный урок. пытаюсь авторизоваться в админку джумлы на локальной машине и ничего не получается.. =)) постоянно Invalid Token..
[Ответить]
Zdez Bil Ya, Прошу скажите что не так
Build
[Warning] Unit1.pas(86): For loop control variable must be simple local variable
[Error] Unit1.pas(109): Undeclared identifier: ‘idhttp1′
[Error] Unit1.pas(110): Undeclared identifier: ‘Pars’
[Error] Unit1.pas(120): Missing operator or semicolon
[Fatal Error] Project1.dpr(5): Could not compile used unit ‘Unit1.pas’
Пожалуйста…
[Ответить]
Zdez Bil Ya Reply:
мая 20, 2011 at 22:57
Вы как-то бездумно копируйте код. Ваша программа не знает, что такое “idhttp1″ и “Pars”
[Ответить]
А можно восстановить ссылку на c++ код?:)
[Ответить]
Zdez Bil Ya Reply:
июня 19, 2011 at 20:53
Восстановлена
[Ответить]
Я пытался по этому примеру сделать автроризацию Вконтакте, но проблема! Пишет вот:
Application.MainFormOnTaskbar := True;
^
|
Вот гдето сдесь
[Ответить]
Очень полезный урок. Благодарен!!!
[Ответить]
Павел шлепните вообще эту строку)))
Application.MainFormOnTaskbar := True;
[Ответить]
Огромное спасибо! Всё предельно понятно
[Ответить]
Спасибо, все работает. Кстати, кто любит сжатый код – вот алтернативная замена функции поиска адреса для отправки POST запроса:
Str:= Copy(Page, Pos(‘<form action="', Page) + 14,
Pos('method="post"', Page) – Pos('<form action="', Page) – 16);
[Ответить]
Коряво, зато работает
[Ответить]