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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2008, 00:50   #1
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию "Логин" на сайт

Вопросы по поводу захода на сайты здесь немало обсуждались. Честное слово - все их прочитал, поиском пользовался.

Суть. Нужно написать программу, которая будет регестрировать аккаунты на gmail.com. Там нужно ввести число на картинке, поэтому смысл такой: программа заходит на сайт, показыват "увиденную" картинку
пользователю, он пишет текст, программа регестрирует аккаунт. Казалось бы, что может быть проще, но неполучиется
Причем тот же самый алгоритм работы прекрасно работает на других сайтах (на всех не проверял, но на парочке) и
при этом регестрирует учетную запиьсь в google (https://www.google.com/accounts/CreateAccount).

Что именно я делаю.

{загрузить рег страницу gmail.ru}
url_reg:=IdHTTP1.Get('https://www.google.com/accounts/NewAccount?service=mail&continue=ht tp%3A%2F%2Fmail.google.com%2Fmail%2 Fe-11-10a63ea0c8ab93a8d5b633d88101d33c-b5432803e2bdf65e6b00f34bd0c64b62ca0 12f8b&type=2');

{выцепить оттуда пары name-value для скрытых полей}
params.Clear;
str_tmp:=url_reg;
while Pos('<input',str_tmp)>0 do
begin
Delete(str_tmp,1,Pos('<input',str_t mp));
str2_tmp:=Copy(str_tmp,1,Pos('>',st r_tmp)-1); {в str2 input тэг}
if Pos('type="hidden"',str2_tmp)>0 then {определить, скрытое поле или нет}
begin
key:=str2_tmp;
Delete(key,1,Pos('name="',key)+5);
key:=Copy(key,1,Pos('"',key)-1);
val:=str2_tmp;
Delete(val,1,Pos('value="',val)+6);
val:=Copy(val,1,Pos('"',val)-1);
params.Append(key+'='+val);
end;
end;

{выцепить оттуда капчу}
str_pic:='<input type="hidden" id="newaccounturl" value="https://www.google.com/accounts/Captcha?ctoken=';
Delete(url_reg,1,Pos(str_pic,url_re g)+Length(str_pic)-1);
url_pic:='https://www.google.com/accounts/Captcha?ctoken='+Copy(url_reg,1,Pos ('"',url_reg)-1);

{показать капшу пользователю}
WebBrowser1.Navigate(url_pic);

потом пользователь вводит слово и

{добавляем рег данные}
login:='asddderu';
pwd:='1311lkh7g656';
params.Add('FirstName=11');
params.Add('LastName=11');

params.Add('Email='+login);
params.Add('Passwd='+pwd);
params.Add('PasswdAgain='+pwd);
params.Add('newaccountcaptcha='+Edi t1.Text);
params.Add('PersistentCookie=no');
params.Add('smhck=1');
params.Add('selection= Номер автобуса, которым я регулярно пользуюсь');
params.Add('ownquestion=');
params.Add('IdentityAnswer=1123');
params.Add('SecondaryEmail=');
params.Add('submitbutton=I accept. Create my account.');

str:=IdHTTP1.Post('https://www.google.com/accounts/CreateAccount?service=mail&amp;cont inue=http%3A%2F%2Fmail.google.com%2 Fmail%2Fe-11-10a63ea0c8ab93a8d5b633d88101d33c-b5432803e2bdf65e6b00f34bd0c64b62ca0 12f8b&amp;type=2',params);

и нифига. В str получаем страничку, гласящюю, что "запрошщенная старница не найдена". Причем если
убрать параметры из хидден полей, то получим страницу регистрации, т.е. косяк где-то в них????

Что за нафиг? Куки? Добавил компонент IdCookieManager, подключил его в IdHTTP, добавил

procedure TForm1.IdCookieManager1NewCookie(AS ender: TObject;
ACookie: TIdCookieRFC2109; var VAccept: Boolean);
begin
VAccept := true;
if ACookie.Path='' then ACookie.Path:='/';
end;

результат прежний. Причем заметил одну вещь, что когда заходишь на страцу регистрации, куки не присылают,
а вот когда уже отправляешь рег данные, то они летят...

Взял старницу с регистрацией, руками удалил оттуда весь мусор, оставил только поля всякие. Забил руками их в POST запрос и послал на сервер. Он их принял. Если все эти поля выдирать прогой, т.е. повышеописанному алгоритму, то "запрошенная страница не найдена".
Взял эти два POST запроса и сравнил. Идентичны (ну кроме динамических параметров).

Помогите, плз, ума не приложэу, чего ему не хватает...

ЗЫ Delphi 7.0
Sergey2 вне форума Ответить с цитированием
Старый 10.01.2008, 00:58   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

на 90% причина в Ajax
поясню:
на gmail при загрузке странице и при заполнении любого поля срабатывают JS функции которые "общаются" с сервером. Именно поэтому сэмулировать голую HTML форму для подобной регистрации вряд ли получится. Если только не копать совсем глупоко и не разгребать весь JS на Google , чего не пожелал бы никому )
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 10.01.2008, 01:06   #3
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
на 90% причина в Ajax
поясню:
на gmail при загрузке странице и при заполнении любого поля срабатывают JS функции которые "общаются" с сервером. Именно поэтому сэмулировать голую HTML форму для подобной регистрации вряд ли получится. Если только не копать совсем глупоко и не разгребать весь JS на Google , чего не пожелал бы никому )
говорю же, что потратил четыре часа на разгребание гуглевской страницы, удалил оттуда весь мусор и оставил только поля всякие. И срабатывает. Ну всмысле перекидывает на страинцацу регистрации с заполненными полями, т.к. капчу не ввел, а не грит "страница не найдена". ДЕло в чем-то другом. Может я с куками че-го не так делаю?
Чем наиболее удобно можно заснифить http трафик?
Sergey2 вне форума Ответить с цитированием
Старый 10.01.2008, 01:10   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

перехватывать Http заголовки и сравнить содержимое HTTP заголовока, от вашей "урезанной" страницы и содержимое заголовка, которое передает Indy
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 10.01.2008, 01:11   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

да, кстати, IdCookies не сработают имхо за счет Twebbrowser. На сколько я помню он солхраняет куки в IE, вместо Webbrowser используйте сначала Get в IdHttp (а собственно ничего и не мешает совместно) чтобы получить именно свою куку
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи

Последний раз редактировалось Квэнди; 10.01.2008 в 01:44.
Квэнди вне форума Ответить с цитированием
Старый 10.01.2008, 01:20   #6
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
да, кстати, IdCookies не сработают имхо за счет Twebbrowser.
Попробовал сейчас его убрать. Непомогло.
Цитата:
На сколько я помню он солхраняет куки в IE, вместо Webbrowser (а собственно ничего и не мешает совместно)
Что это означает?
Цитата:
используйте сначала Get в IdHttp чтобы получить именно свою куку
Там первый запрост то как раз Getом и делается. Я же привел исходник.

Ну даже если допустить все вышесказанное, то вот какой парадокс -
выцеппленные руками со сохраненной страницы значения к POST запросу и забитые руками в текст программыс - принимаються гуглем, а если эти поля выцеплять из результата IdHTTP1.Get, то "страница не найдена".
Кажеться что все просто и под носом, но не могу понять, что именно.
Sergey2 вне форума Ответить с цитированием
Старый 10.01.2008, 01:43   #7
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Тогда все до банального просто:
перед постом, посмотри что постишь, и сравни с тем что постишь с своей страницы, где- то косяк в парсинге
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 10.01.2008, 01:49   #8
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
перехватывать Http заголовки и сравнить содержимое HTTP заголовока, от вашей "урезанной" страницы и содержимое заголовка, которое передает Indy
а чем это можно сделать?
Sergey2 вне форума Ответить с цитированием
Старый 10.01.2008, 02:06   #9
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

Хм. Забил параметры руками с сохраненой страницы кроме четерех динамических, которые парсю с IdHtTTP1.Get.... И заработало. Ну пока не до конца, но он уже ругаеться что картинка не верно введена...
что-то я не понимаю в этой жизни.
Sergey2 вне форума Ответить с цитированием
Старый 10.01.2008, 02:12   #10
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

Цитата:
Сообщение от Sergey2 Посмотреть сообщение
Хм. Забил параметры руками с сохраненой страницы кроме четерех динамических, которые парсю с IdHtTTP1.Get.... И заработало. Ну пока не до конца, но он уже ругаеться что картинка не верно введена...
что-то я не понимаю в этой жизни.
Хм... работает. Логинится. Теперь все же хочется понять почему не работает когда парсит сам. Походу, действительно, где-то косяк в парсинге... но четыре динамических параметра парсяться идеально, о чем говрит успешная регистрация...

млин... надо было админом идти работать, там тоже не понятно как и что работает, но лечиться переустановкой/обновлением/заменой софта
Sergey2 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder AleksP C++ Builder 7 11.04.2009 13:06
"О Программе" переход на сайт Лубышев Общие вопросы Delphi 3 08.06.2008 22:09
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49