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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2008, 07:19   #1
St0rm
 
Регистрация: 12.10.2008
Сообщений: 8
По умолчанию Регер акков на yandex'e

пишу регистрацию для yandex'a , вылезла такая бага как поправить помогите



Код:
   
var
   strok : string;
   a : string;
   Data : TStringList;
   Captcha: TMemoryStream;
  begin
  Captcha:= TMemoryStream.Create;
  Data:=TStringList.Create;
  a:=idHTTP1.Get('http://passport.yandex.ru/passport?mode=register');
  strok:=copy(a,pos('idkey=',a)+6,22);
  idHTTP1.Get('http://passport.yandex.ru/digits?idkey='+strok,Captcha);
  Captcha.SaveToFile('cod.png');
  Captcha.Free;
  image1.Picture.LoadFromFile('cod.png');
  begin
  Data.Add('idkey='+strok);
  Data.Add('filled=yes');
  Data.Add('iname=newiname');
  Data.Add('fname=newfname');
  Data.Add('login='+InputBox('Логин', 'Введите новый логин', 'newiflogin1'));
  Data.Add('passwd=new69pass111');
  Data.Add('passwd2=new69pass111');
  Data.Add('hintq=9');
  Data.Add('udhintq=');
  Data.Add('hinta=40000');
  Data.Add('hintasave=40000');
  Data.Add('questnum=9');
  Data.Add('hintqsave=');
  Data.Add('email=');
  Data.Add('phonenumber=');
  Data.add('code='+InputBox('Капча', 'Введите цифры с картинки', ''));
  Data.Add('agreed=yes');
  Data.Add('done=done');
  IdHTTP1.Post ('http://passport.yandex.ru/passport?mode=register', Data);
Data.Free;
Memo3.Lines.Add(strok);
   end;
end.
St0rm вне форума Ответить с цитированием
Старый 29.10.2008, 11:42   #2
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

HandleRedirects у idHttp поставить в true
Denager вне форума Ответить с цитированием
Старый 29.10.2008, 20:52   #3
MrVOVA
Новичок
Джуниор
 
Регистрация: 29.10.2008
Сообщений: 2
Восклицание

Помогите, тоже делаю регер аков но на сайте http://by.ru/create.cgi

вот там немножко сложней, всё на POST!
неможу никак витащить капчу в на мою прогу......
адрес к капче
Код HTML:
/pin2.cgi?session=
а дальше номер сесии которий передаетса через POST....


P.S. Я чайник немножко, за каждой строчкой об'яснения пишем.....
P.S. Вибачте за російський, я Українець.....
MrVOVA вне форума Ответить с цитированием
Старый 30.10.2008, 08:24   #4
St0rm
 
Регистрация: 12.10.2008
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Denager Посмотреть сообщение
HandleRedirects у idHttp поставить в true
Не помогло терь ошибок прибавилось <http>
St0rm вне форума Ответить с цитированием
Старый 30.10.2008, 09:27   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Общее решение в любом случае одно и тоже:
связываете idhttp с куками
сначала делаете get странице регистрации длля установки необходимых куков (требуется не всегда, но для общего решения надо)
берем исходный код страницы заполняем в POST все поля формы скрытые и не скрытые в том числе.
выполняем POst любые ошибки, вернувшиеся сервером убираются тольк оповторной проверкой всего что вы сделали выше.
Помочь в подобных случаях можно только просто написав за вас процедуру регистрации.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 30.10.2008, 11:28   #6
St0rm
 
Регистрация: 12.10.2008
Сообщений: 8
По умолчанию

Ошибку свою нашёл, а всего лишь не внимателен был, yandex поменял регистрацию разделив ту старую регистрацию на 2 шага. Все работает, но ток 1 регистрацию, а далие над прогу перезапускать иначе вылетит ошибка: HTTP/1.1 400 Bad Request ...

Код:
var
   A , B : string;
   Data, LoginReg : TStringList;
   Captcha: TMemoryStream;
   login : string;
begin // Step 1
  LoginReg:= TStringList.Create;
  idHTTP1.Get('http://passport.yandex.ru/passport?mode=register');
  LoginReg.Add('step=one');
  LoginReg.Add('filled=yes');
  LoginReg.Add('iname='+Edit8.Text);
  LoginReg.Add('fname='+Edit9.Text);
  LoginReg.Add('login='+Edit10.Text);
  LoginReg.Add('done=done');
  A:=IdHTTP1.Post('http://passport.yandex.ru/passport?mode=register', LoginReg);
  login:=copy(a,pos('idkey=',a)+6,22);
  memo3.Lines.Add('Code Captchi:'+login);
begin  // Step 2
  memo3.Lines.Add('Ваш логин - '+Edit10.Text);
  Captcha:= TMemoryStream.Create;
  Data:= TStringList.Create;
  idHTTP1.Get('http://passport.yandex.ru/digits?idkey='+login,Captcha);
  Captcha.SaveToFile('cod.png');
  Captcha.Free;
  image1.Picture.LoadFromFile('cod.png');
  Data.Add('idkey='+login);
  Data.Add('step=two');
  Data.Add('filled=yes');
  Data.Add('login='+Edit10.Text);
  Data.Add('fname='+Edit9.Text);
  Data.Add('iname='+Edit8.Text);
  Data.Add('passwd='+Edit11.Text);
  Data.Add('passwd2='+Edit12.Text);
  Data.Add('hintq=9');
  Data.Add('udhintq=');
  Data.Add('hinta=40000');
  Data.Add('hintasave=40000');
  Data.Add('questnum=9');
  Data.Add('hintqsave=');
  Data.Add('email='+Edit14.Text);
  Data.Add('phonenumber='+Edit15.Text);
  Data.add('code='+InputBox('Ввод капчи', 'Введите контрольные цифры', ''));
  Data.Add('agreed=yes');
  IdHTTP1.Post ('http://passport.yandex.ru/passport?mode=register', Data);
  MessageDlg('Поздравляю вы удачно зарегистрировали Почту!',mtInformation,[mbOK],0);
  Data.Free;
    end;
end;
end.
Как сделать чтоб после каждой удачной регистраций, он заново запускал процедуру без введеных данных?

Последний раз редактировалось St0rm; 30.10.2008 в 11:35.
St0rm вне форума Ответить с цитированием
Старый 01.11.2008, 08:58   #7
MrVOVA
Новичок
Джуниор
 
Регистрация: 29.10.2008
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
Помочь в подобных случаях можно только просто написав за вас процедуру регистрации.
ёсли ёсть время, напиши только процедуру витаскивания капчи...., далее я всё зделал....)

St0rm опиши каждую строчку кода плз((
MrVOVA вне форума Ответить с цитированием
Старый 12.11.2008, 11:59   #8
obscurant
 
Регистрация: 11.11.2008
Сообщений: 5
По умолчанию

Цитата:
Сообщение от St0rm Посмотреть сообщение
Ошибку свою нашёл, а всего лишь не внимателен был, yandex поменял регистрацию разделив ту старую регистрацию на 2 шага. Все работает, но ток 1 регистрацию, а далие над прогу перезапускать иначе вылетит ошибка: HTTP/1.1 400 Bad Request ...
И правильно вылетает... Сервак на той стороне в шоке от получения страницы, заполнения ее и отправки обратно за доли секунды Поставь sleep(1000) между первым и вторым шагом и будет тебе счастье
obscurant вне форума Ответить с цитированием
Старый 12.11.2008, 12:11   #9
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,520
По умолчанию

sleep(1000) - это одна секунда, проверено, для яндекса это мало.
Alar вне форума Ответить с цитированием
Старый 12.11.2008, 13:06   #10
obscurant
 
Регистрация: 11.11.2008
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Alar Посмотреть сообщение
sleep(1000) - это одна секунда, проверено, для яндекса это мало.
Ну уж не знаю... У меня с одной секундой регится нормально...
obscurant вне форума Ответить с цитированием
Ответ


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