Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi idHTTP: php seite aufrufen (post) (https://www.delphipraxis.net/16510-idhttp-php-seite-aufrufen-post.html)

Pseudemys Nelsoni 18. Feb 2004 10:47


idHTTP: php seite aufrufen (post)
 
hoi,

ich versuche mich in ein forum einzuloggen( http://www.cncgamer.com/forums/index...=Login&CODE=00 ), aber irgendwie klappt das nicht, ich kriege immer ein fehler angezeigt als ergebnis...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  url: string = 'http://www.cncgamer.com/forums/index.php?act=Login&CODE=01';
var
  SL: TStringList;
begin
  SL := TStringList.Create;
  SL.Add('CookieDate=1');
  SL.Add('UserName=' + Edit1.Text);
  SL.Add('PassWord=' + Edit2.Text);
  Memo1.Text := idHTTP1.Post(url, SL);
  SL.Free;
end;

^^^^^^^^^Das ist der DelphiCode mit dem ich das versuche. im html quelltext der seite steht:


Code:
<form action="http://www.cncgamer.com/forums/index.php?act=Login&amp;CODE=01" method="post" name='LOGIN' onsubmit='return ValidateForm()'>
<input type='hidden' name='referer' value="http://www.cncgamer.com/forums/index.php?" />
<div class="tableborder">
  <div class="maintitle">[img]style_images/1/nav_m.gif[/img]Log In</div>
  <div class='pformstrip'>Please enter your details below to log in</div>
  <table class="tablebasic" cellspacing="1">
  <tr>
    <td class='pformleftw'>Please enter your name</td>
    <td class='pformright'><input type='text' size='20' maxlength='64' name='UserName' class='forminput' /></td>
  </tr>
  <tr>
    <td class='pformleftw'>Please enter your password</td>
    <td class='pformright'><input type='password' size='20' name='PassWord' class='forminput' /></td>
  </tr>
  </table>
  <div class="pformstrip">Options</div>
  <table class="tablebasic" cellspacing="1">
  <tr>
    <td class='pformleftw'>[b]Remember me?[/b]
If enabled, you will be automatically logged in again when you visit.
This is not recommended for shared computers.</td>
    <td class='pformright'><input type="radio" name="CookieDate" value="1" checked="checked" />Yes
<input type="radio" name="CookieDate" value="0" />No</td>
  </tr>

  </table>
  <div class="pformstrip" align="center"><input type="submit" name='submit' value="Log me in" class='forminput' /></div>


und ich sehe da nur USERNAME, PASSWORD und COOKIEDATE, also muss es doch stimmen?

Pseudemys Nelsoni 19. Feb 2004 09:39

Re: idHTTP: php seite aufrufen (post)
 
hm, hat das noch nie jemand gemacht?
ich muss mich in einem Forum einloggen, wenn ich die daten per POST dann übergebe, sollte ich eingeloggt sein, dem ist aber nicht so.
ich kriege nämlich auf die Spiele-Ladder des Forums nur zugang wenn ich eingeloggt bin.

Also wenn jemand doch noch ne Idee hat möge er sie bitte posten (SirThornberry wüsste das sicher :\).

SirThornberry 27. Mär 2004 13:08

Re: idHTTP: php seite aufrufen (post)
 
Ansich ist der Ansatz richtig. Ich vermute es klappt nicht weil du einige Felder nicht mit postest. Du solltest auch die "hidden"-Felder mit posten. So hast du zum beispiel
Code:
<input type='hidden' name='referer' value="http://www.cncgamer.com/forums/index.php?" />
und
Code:
<input type="submit" name='submit' value="Log me in" class='forminput' />
nicht mit gepostet (Sehr selten das beim submit auch ein value ist, aber soll vorkommen)

versuch mal (falls nicht schon geschehen da ich mir ja ziemlich viel zeit mit der antwort gelassen hab)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  url: string = 'http://www.cncgamer.com/forums/index.php?act=Login&amp;CODE=01';
var
  SL: TStringList;
begin
  SL := TStringList.Create;
  SL.Add('referer=http://www.cncgamer.com/forums/index.php?');
  SL.Add('CookieDate=1');
  SL.Add('UserName=' + Edit1.Text);
  SL.Add('PassWord=' + Edit2.Text);
  SL.Add('submit=Log me in');
  Memo1.Text := idHTTP1.Post(url, SL);
  SL.Free;
end;
ganz dolles sorry nochmal das ich erst so spät poste, aber hatte den thread wohl damals übersehen

gekmihesg 27. Mär 2004 13:33

Re: idHTTP: php seite aufrufen (post)
 
so geht das:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  data: TIdMultiPartFormDataStream;
  seite: string;
begin
  data := TIdMultiPartFormDataStream.Create;
  try
    data.AddFormField('uname', user.Text);
    data.AddFormField('uemail', email.Text);
    data.AddFormField('psword', pwd.Text);
    data.AddFormField('hash','ed132e9e2b31af73ad11bb450f0573d3');
    seite := HTTP.Post('http://www.kingsofchaos.com/login.php', data);
  finally
    data.Free;
  end;
end;

SirThornberry 27. Mär 2004 13:44

Re: idHTTP: php seite aufrufen (post)
 
Ein MultipartFormDataStream ist aber bissl übertrieben. Das ist ja wie mit Kanonenkugeln auf Spatzen zu schießen. Könnte sogar schief gehen da im quelltext als methode post steht und nicht der syntax für multipart... Die Versandart unterscheidet sich da ein bischen aber kann sein das php da keinen unterschied macht

himitsu 27. Mär 2004 13:51

Re: idHTTP: php seite aufrufen (post)
 
Zumindestens braucht er die "Felder" referer und submit nicht unbedingt.

submit ist ja nur der Sendebutton und kein Eingabefeld und
referer gibt die Seite an, die nach dem erfolgreichen versenden angezeigt werden soll. Aber wenn referer nicht angegeben wird, dann wird normalerweise einfach eine Seite mit einer Nachricht, das alles erfolgreich versendet wurde, angezeigt.

Also an den Feldern selbst liegt es nicht.


Es könnte aber auch sein, das es wegen dem "&" nicht gehtverwuch's mal so:
Code:
url: string = 'http://www.cncgamer.com/forums/index.php?act=Login[color=red]&[/color]CODE=01';

SirThornberry 27. Mär 2004 13:57

Re: idHTTP: php seite aufrufen (post)
 
Es kann durchaus daran liegen das die Felder nicht mit gesendet wurden. Wenn die "'http://www.cncgamer.com/forums/index.php" explizit überprüft ob die Felder den gegebenen Value haben kann es ganau daran liegen. Es ist üblich in bei Loginseiten auch dem Submitbutton einen value zu verpassen um das passwort hacken so zu erschweren weil es ne menge leute gibt die diesen value einfach nicht mitsenden in der Anahme das dieser irrelevant sei


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz