|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.01.2008, 00:50 | #1 |
Форумчанин
Регистрация: 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&cont inue=http%3A%2F%2Fmail.google.com%2 Fmail%2Fe-11-10a63ea0c8ab93a8d5b633d88101d33c-b5432803e2bdf65e6b00f34bd0c64b62ca0 12f8b&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 |
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 | |
Форумчанин
Регистрация: 08.01.2008
Сообщений: 233
|
Цитата:
Чем наиболее удобно можно заснифить http трафик? |
|
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 | ||
Форумчанин
Регистрация: 08.01.2008
Сообщений: 233
|
Попробовал сейчас его убрать. Непомогло.
Цитата:
Цитата:
Ну даже если допустить все вышесказанное, то вот какой парадокс - выцеппленные руками со сохраненной страницы значения к POST запросу и забитые руками в текст программыс - принимаються гуглем, а если эти поля выцеплять из результата IdHTTP1.Get, то "страница не найдена". Кажеться что все просто и под носом, но не могу понять, что именно. |
||
10.01.2008, 01:43 | #7 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
Тогда все до банального просто:
перед постом, посмотри что постишь, и сравни с тем что постишь с своей страницы, где- то косяк в парсинге
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
10.01.2008, 01:49 | #8 |
Форумчанин
Регистрация: 08.01.2008
Сообщений: 233
|
|
10.01.2008, 02:06 | #9 |
Форумчанин
Регистрация: 08.01.2008
Сообщений: 233
|
Хм. Забил параметры руками с сохраненой страницы кроме четерех динамических, которые парсю с IdHtTTP1.Get.... И заработало. Ну пока не до конца, но он уже ругаеться что картинка не верно введена...
что-то я не понимаю в этой жизни. |
10.01.2008, 02:12 | #10 | |
Форумчанин
Регистрация: 08.01.2008
Сообщений: 233
|
Цитата:
млин... надо было админом идти работать, там тоже не понятно как и что работает, но лечиться переустановкой/обновлением/заменой софта |
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка при использовании 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 |