![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#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 |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
![]()
на 90% причина в Ajax
поясню: на gmail при загрузке странице и при заполнении любого поля срабатывают JS функции которые "общаются" с сервером. Именно поэтому сэмулировать голую HTML форму для подобной регистрации вряд ли получится. Если только не копать совсем глупоко и не разгребать весь JS на Google , чего не пожелал бы никому )
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
![]() |
![]() |
![]() |
#3 | |
Форумчанин
Регистрация: 08.01.2008
Сообщений: 233
|
![]() Цитата:
Чем наиболее удобно можно заснифить http трафик? |
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
![]()
перехватывать Http заголовки и сравнить содержимое HTTP заголовока, от вашей "урезанной" страницы и содержимое заголовка, которое передает Indy
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
![]()
да, кстати, IdCookies не сработают имхо за счет Twebbrowser. На сколько я помню он солхраняет куки в IE, вместо Webbrowser используйте сначала Get в IdHttp (а собственно ничего и не мешает совместно) чтобы получить именно свою куку
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи Последний раз редактировалось Квэнди; 10.01.2008 в 01:44. |
![]() |
![]() |
![]() |
#6 | ||
Форумчанин
Регистрация: 08.01.2008
Сообщений: 233
|
![]()
Попробовал сейчас его убрать. Непомогло.
Цитата:
![]() Цитата:
Ну даже если допустить все вышесказанное, то вот какой парадокс - выцеппленные руками со сохраненной страницы значения к POST запросу и забитые руками в текст программыс - принимаються гуглем, а если эти поля выцеплять из результата IdHTTP1.Get, то "страница не найдена". Кажеться что все просто и под носом, но не могу понять, что именно. |
||
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
![]()
Тогда все до банального просто:
перед постом, посмотри что постишь, и сравни с тем что постишь с своей страницы, где- то косяк в парсинге
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 08.01.2008
Сообщений: 233
|
![]() |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 08.01.2008
Сообщений: 233
|
![]()
Хм. Забил параметры руками с сохраненой страницы кроме четерех динамических, которые парсю с IdHtTTP1.Get.... И заработало. Ну пока не до конца, но он уже ругаеться что картинка не верно введена...
что-то я не понимаю в этой жизни. |
![]() |
![]() |
![]() |
#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 |