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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2010, 23:14   #1
Alest
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 28
По умолчанию Регистрация на сайте.

Всем доброе время суток!
Я новенький на вашем форуме, спасибо большое Квэнди за его прекрасную статью, она поменяла во мне взляд на сетевое программирование..

Я только начинаю работать с сетью, прошу помогать мне по возможности..
Выбрал сайт vten.ru пишу под него регистрацию.. Вообщем вот открыл код формы:
Код HTML:
<form action="../;jsessionid=59AA7CFC09AB80E7A31940CBFFAA4569?wicket:interface=:0:registrationForm::IFormSubmitListener::" id="id1" method="post">
 
<input type="hidden" name="id1_hf_0" id="id1_hf_0" />
 
Имя персонажа
<input id="login" type="text" style="width:12em;" value="" name="login"/>
 
Сторона
<select id="side" style="width:12em;" name="side">
<option selected="selected" value="2">Тёмный</option>
<option value="1">Светлый</option>
</select>
 
Класс
<select id="type" style="width:12em;" name="type">
<option value="1">Маг</option>
<option value="2">Монах</option>
<option selected="selected" value="3">Воин</option>
</select>
 
Пол
<select id="sex" style="width:12em;" name="sex">
<option selected="selected" value="m">Мужской</option>
<option value="f">Женский</option>
</select>
 
Я изучил и принимаю условия Пользовательского соглашения
<input type="checkbox" checked="checked" name="agreementAccepted"/> 
 
Зарегистрироваться
<input type="submit" value="Зарегистрироваться" style="width:12em;" name=":submit" id="id2"/>
</form>
Потом я прошелся сниффером по кнопке, получил URL:
Код:
http://vten.ru/?wicket:interface=:3:registrationForm::IFormSubmitListener::
PostData:
Код:
id3_hf_0=&login=qwerty&side=1&type=3&sex=m&agreementAccepted=on&%3Asubmit=%D0%97%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%D1%81%D1%8F
// и Referer: 
http://vten.ru/registration/
Сдесь я набросал сам POST запрос:
Код:
procedure TForm1.RegButtonClick(Sender: TObject);
var
  Header,Structure : TStringList;
begin
  Structure := TStringList.Create;
  Header := TStringList.Create;
try
  Structure.Add('Login='+LoginEdit.Text+'side='+SideComboBox.Text
  +'type='+TypeComboBox.Text+'sex='+SexComboBox.Text+
  'agreementAccepted=checked');
  Header.Text := idhttp1.Post('http://vten.ru/?wicket:interface=:2:registrationForm::IFormSubmitListener::', Structure);
if Pos('Поздравляем, регистрация завершена!', Header.Text)<>0 then
    ShowMessage('Вы зарегестрированы!')
  else
    ShowMessage('Регистрация не удалась!');
finally
  Structure.Free;
  Header.Free;
end;
end;
Но регестрировать он так и не захотел, пожалуста подскажите где я ошибся , или что не дописал?
Alest вне форума Ответить с цитированием
Старый 07.06.2010, 23:32   #2
spl1nter
Пользователь
 
Регистрация: 17.11.2009
Сообщений: 14
По умолчанию

для начала, непавильный адрес отправки данных, нужно парсить его из form action.
Для каждого параметра нужна отдельная строчка в списке, то есть
Код:
Structure.Add('Login='+LoginEdit.Text);
Structure.Add('side='+SideComboBox.Text);
и тд.
spl1nter вне форума Ответить с цитированием
Старый 07.06.2010, 23:46   #3
Alest
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 28
По умолчанию

Цитата:
var
Header,Structure : TStringList;
Http: TIdHTTP;
begin
Http := IdHTTP1.Create(nil);
Structure := TStringList.Create;
Header := TStringList.Create;
Http.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; DigExt)';
try
Structure.Add('Login='+LoginEdit.Te xt);
Structure.Add('side='+SideComboBox. Text);
Structure.Add('type='+TypeComboBox. Text);
Structure.Add('sex='+SexComboBox.Te xt);
Structure.Add('agreementAccepted=on ');
Header.Text := idhttp1.Post('http://vten.ru/?wicket:interface=:2:registrationFo rm::IFormSubmitListener::', Structure);
if Pos('Ïîçäðàâëÿåì, ðåãèñòðàöèÿ çàâåðøåíà!', Header.Text)<>0 then
ShowMessage('Âû çàðåãåñòðèðîâàíû!')
else
ShowMessage('Ðåãèñòðàöèÿ íå óäàëàñü!');
finally
Structure.Free;
Header.Free;
end;
Так тоже не регеструрует, пробовал..
Alest вне форума Ответить с цитированием
Старый 07.06.2010, 23:46   #4
Alest
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 28
По умолчанию

//ой, сообщение 2 раза отправилось..

Вот переписал
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  Header, Structure: TStringList;
begin
  Structure := TStringList.Create;
  Header := TStringList.Create;
try
  Structure.Add('login=b7068');
  Structure.Add('side=1');
  Structure.Add('type=3');
  Structure.Add('sex=m');
  Structure.Add('agreementAccepted=on');
  Header.Text := idhttp1.Post('http://vten.ru/?wicket:interface=:11:registrationForm::IFormSubmitListener::', Structure);
if Pos('Поздравляем, регистрация завершена!', Header.Text)>0 then
  ShowMessage('Вы зарегестрированы!')
else
  ShowMessage('Регистрация не удалась!');
finally
  Structure.Free;
  Header.Free;
end;
end;
ошибся в side=1, 3.. параметрах , но все равно не регистрирует

Последний раз редактировалось Alest; 08.06.2010 в 20:00.
Alest вне форума Ответить с цитированием
Старый 08.06.2010, 20:35   #5
Alest
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 28
По умолчанию

Вставил мемо , на struсtura увидел ожидаемый текст
login=b7068
side=1
type=3
sex=m
agreementAccepted=on

PostData немного другая
Код:
id3_hf_0=&login=qwerty&side=1&type=3&sex=m&agreementAccepted=on&%3Asubmit=%D0%97%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%D1%81%D1%8F
еще заметил что interface=:11: , число меняется при каждой регистрации
Alest вне форума Ответить с цитированием
Старый 08.06.2010, 20:41   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
еще заметил что interface=:11: , число меняется при каждой регистрации
значит делаем так, сначало Get страницы регистрации, там берем значения скрытых полей, потом уже используя их постим.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.06.2010, 21:51   #7
Alest
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 28
По умолчанию

Вставил
Код:
  s:=idhttp1.Get('http://vten.ru/registration/');
  s:=copy(s,pos('<form action="../?wicket:interface=:2:registrationForm::IFormSubmitListener::"',s)+35,2);
  s1:=copy(s,pos('<form action="http://vten.ru/?wicket:interface=:'+s+':registrationForm::IFormSubmitListener::" id="id3"',s1)+97,1);
  Memo1.Lines.Add(s);
  Structure.Add('id'+s1+'_hf_0=');
  Structure.Add('login=b7068');
  Structure.Add('side=1');
  Structure.Add('type=3');
  Structure.Add('sex=m');
  Structure.Add('agreementAccepted=on');
  Header.Text := idhttp1.Post('http://vten.ru/?wicket:interface=:'+s+':registrationForm::IFormSubmitListener::', Structure);
сделал так , но вроде с копированием ошибся, как правильно скопировать только цифры не затрагивая значки?

Последний раз редактировалось Alest; 08.06.2010 в 22:43.
Alest вне форума Ответить с цитированием
Старый 08.06.2010, 23:50   #8
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  sl, sl1:TStringList;
  url:string;
  i : Integer;
begin
  sl:= TStringList.Create;
  sl1 := TStringList.Create;
  IdHTTP1.HandleRedirects := True;
  sl.Text := IdHTTP1.Get('http://vten.ru/registration/');
  url := Copy(sl.Text,Pos('<form action="',sl.Text)+17,PosEx('"',sl.Text,Pos('<form action="',sl.Text)+18)-Pos('<form action="',sl.Text)-17);
  i := Pos('<input type="hidden" name="',sl.Text)+27;
  sl1.Add(Copy(sl.Text,i,PosEx('"',sl.Text,i)-i) + '=');
  sl1.Add('login=dsgfhhi');
  sl1.Add('side=2');
  sl1.Add('type=1');
  sl1.Add('sex=m');
  sl1.Add('agreementAccepted=on');
  sl1.Add(':submit=Зарегистрироваться');

  Memo1.Text := UTF8Decode(IdHTTP1.Post('http://vten.ru/' + url,sl1));
  if Pos(''Поздравляем',Memo1.Text)<>0 then
  ShowMessage('Вы зарегестрированы!')
  else
    ShowMessage('Регистрация не удалась!');
  sl1.Free;
  sl.Free;
end;
Как-то так

Последний раз редактировалось kangreon; 08.06.2010 в 23:58.
kangreon вне форума Ответить с цитированием
Старый 09.06.2010, 02:07   #9
Alest
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 28
По умолчанию

Благодарю! Все работает остальсь только со строкой разобраться
Код:
 url := Copy(sl.Text,Pos('<form action="',sl.Text)+17,PosEx('"',sl.Text,Pos('<form action="',sl.Text)+18)-Pos('<form action="',sl.Text)-17);
эт я уж сам Спасибо большое!!!!!
Alest вне форума Ответить с цитированием
Старый 09.06.2010, 15:41   #10
Pasha_Sh
Форумчанин
 
Аватар для Pasha_Sh
 
Регистрация: 16.05.2010
Сообщений: 137
По умолчанию

Эта строка копирует значение из исходного кода страницы в строку url
osu
Pasha_Sh вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регистрация на сайте Cpluser Общие вопросы .NET 13 13.01.2010 13:52
Регистрация ICQ на офф сайте W0LF Работа с сетью в Delphi 20 13.11.2009 20:40
Регистрация на сайте http://7auto.ru/prices.php antananarivu Работа с сетью в Delphi 3 03.09.2009 11:45
Регистрация на сайте Masiana JavaScript, Ajax 3 17.08.2009 14:39
Регистрация на сайте Terikon Работа с сетью в Delphi 3 16.03.2009 21:02