problem z rejestracją przez idhttp indy

0

Mam problem z zarejestrowaniem nowego konta na stronie zapytaj.com.pl formularz w skrócie(bez tabel, styli i opisów) wygląda tak:

<form name="form1register" method="post" action="/register.html">
     E-mail:<input type="text" name="req_email" value="" maxlength="60" maxlength="60" />
     Nick:  <input type="text" name="nick" value="" maxlength="20" maxlength="20" />
     Hasło:<input type="password" name="req_pass" value="" maxlength="60" maxlength="60" />
     Powtórz hasło: <input type="password" name="req_repass" value="" maxlength="60" maxlength="60" />
	      
	    		
<object width="1" height="1">
<param name="movie" value="/flash/ssuk.swf"></param>
<param name="wmode" value="transparent"></param>
<embed src="/flash/ssuk.swf" type="application/x-shockwave-flash" wmode="transparent" width="1" height="1">
</embed>
</object>
<input type="hidden" id="_ws" name="_ws" value=""/>
<input type="hidden" id="_p" name="_p" value=""/>
<input type="hidden" id="_f" name="_f" value=""/>
<input type="hidden" id="_c" name="_c" value=""/>

<script type="text/javascript">
function _p() { return getPlugins().join(','); }
function _ssuk(params) { 
	$('#_ws').val(window.screen.width+'x'+window.screen.height+'x'+window.screen.colorDepth);
	$('#_f').val(params[0]);
	$('#_p').val(params[1]);
	$('#_c').val(params[2]);
}
</script>
	    		
     <input type="submit" id="submitReg" name="ZalozKonto" value="   Załóż konto   " />
	</form>

mój kod od butona wygląda tak (na formie są: idhttp1 , idhttp2+idcookiemanager)

var adres1,odz,doz,mail,nick,haslo:string;
   StreamIn,StreamOut :TStringStream;
   TF : TextFile;
begin





adres1 := IdHTTP1.Get('http://10minutemail.com/10MinuteMail/index.html');



odz := 'name="addyForm:addressSelect" value="';
doz := '" size="30"';

mail := copy(adres1,
pos(odz , adres1) + Length(odz) ,
pos(doz , adres1) - (pos(odz , adres1) + Length(odz))
) ;

label1.Caption := mail;


nick := copy(mail , 0, (pos('@', mail) - 1));

haslo := generuj;




  StreamIn := TStringStream.Create('');
  StreamOut := TStringStream.Create('');
try
  StreamIn.WriteString(Format('req_email=%s&nick=%s&req_pass=%s&req_repass=%s&ZalozKonto=%s&_ws=%s&_p=%s&_f=%s&_c=%s',
   [mail, nick, haslo, haslo, '   Załóż konto   ', '1', '1', '1', '1']));

  idHttp2.Post('http://zapytaj.com.pl/register.html', StreamIn, StreamOut);
         AssignFile(TF, 'dane.txt');
       try
         Append(TF);
         Writeln(TF, nick + '|' + haslo + '|' + mail);
       finally
         CloseFile(TF);
       end;
except
label3.Caption := 'ERROR';
end;



label2.Caption := StreamOut.DataString;





  AssignFile(TF, 'a.htm');
  try
   Rewrite(TF);
    Writeln(TF, label2.Caption);
  finally
    CloseFile(TF);
  end;






 Input.Free;
 Output.Free;

z powodu że nie wiem jakie są wartości zmiennych _ws, _p, _f, _c nadałem im wartość 1.

Hasło generuje funkcja

function generuj : string;
var i: integer;
has:string;
begin
for i := 0 to 15  do
has := has + Chr(97+Random(25));
result := has;
end;

Podczas wysyłania i odebrania danych danych są one zapisywane, problem mam taki że wyskakuje komunikat "Oba hasła powinny być takie same (minimum 6 znaków)" w czym tkwi problem?

0

No i w tym problem że nie wiesz jakie są wartości tych zmiennych, nie mozesz sobie tak podstawiac na widzi mi sie bo nic z tego nie będzie. Wartości tych zmiennych są inne za każdym otworzeniem adresu http://zapytaj.com.pl/register.html np. mogą być takie:

<input id="_ws" name="_ws" value="1152x864x24" type="hidden">
<input id="_p" name="_p" value="ef29886846c9d611be1902b4f2dc262c" type="hidden">
<input id="_f" name="_f" value="15bbc613ee4e32fe77020028c065d9d9" type="hidden">
<input id="_c" name="_c" value="53a40d620b9545f8db17ec63eeec847c" type="hidden">

Więc musisz pierwsze za pomocą Get pobrać stronkę, później za pomocą wyrażeń regularnych lub zwykłego Pos wyparsować z niej te wartości i podstawić w odpowiednim miejscu kodu.

0

Ja polecam zamiast Indy używać Synapse to po pierwsze. Po drugie do ewentualnego Parsowania kodu
strony, jak potrzeba to wyrażeń regularnych. Modul do tego wraz z przykładami oraz dokumentacją jest
u mnie na stronie MediaFire pod adresem: http://www.mediafire.com/?czhw3mmzjyn natomiast aby na
pewno wysyłać prawidłowe dane do strony polecam skorzystać z WireSharka albo innego Snifera i sobie
pod nim zobaczyć jak wygląda "TCP Stream" wysyłany metodą POST do strony. Jak używać WireSharka,
można się łatwo dowiedzieć z tutoriali video umieszczonych na YouTube. I to tyle co mogę doradzić :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1