Entwickler-Ecke

Internet / Netzwerk - Ich verzweifel an Post mit TidHttp!!


JinJitsu107 - Mi 26.11.08 18:11
Titel: Ich verzweifel an Post mit TidHttp!!
Also es sieht so aus.
Delphi kann ich schon länger, tut aber nicht viel zur Sache.
Mit Indy wollte ich jetzt mich ein wenig in Netwerk/Internetprogrammierung versuchen.

Also mein Anliegen ist eigentlich einfach.
Ein stinknormaler HTTP POST Vorgang um sich bei einer Seite anzumelden.
Ja ich weiß hattet ihr bestimmt schon oft. Hab ich auch viel gelesen. Hab ich probiert.
Aus irgendeinem Grund Funktioniert es nicht.
Ich bekomme als Antwort immer die gleiche login.php!

Am Beispiel:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
Filestream : TIdMultiPartFormDataStream;
RESPONSE : String;
begin
Filestream := TIdMultiPartFormDataStream.Create;
Filestream.AddFormField('username''meinusrname');
Filestream.AddFormField('password''meinPw');
RESPONSE := idHTTP1.POST('http://www.pennerhilfe.de/login.php',Filestream);
Memo1.Lines.Add(RESPONSE);
end;


Den Link lasse ich absichtlich drin.

Warum bekomme ich immer nur die login.php zurück?
Ich hab schon viel probiert, viele Varianten aber jedes mal das gleiche immer als Antwort die login.php.
Was mach ich falsch? Bin ich so doof?
Verzweifelten dank im Vorraus


Sirke - Mi 26.11.08 18:39

Ich kenne die Programmierung der Seite nicht, aber viele Anwendungen testen ein abgesendetes Formular per if-Anweisung auf das Value des Submit-Buttons.

Quelltext
1:
if( isset($_POST['submit']) ) { ...                    

Daher würde ich das als Test einfach mal mit anfügen:

Delphi-Quelltext
1:
Filestream.AddFormField('submit''Login');                    

Eventuell hast du damit schon Glück ;-)

LG Sirke


Horst_H - Mi 26.11.08 18:46

Hallo,
bei so störrischen Seiten speichere ich Seite lokal und ersetze einfach "post" durch "get".
Dann starte ich die Seite, fülle irgendwelche Daten ein und siehe da, man sieht die Daten, welche übertragen werden sollen nach dem Fragezeichen:
"file://localhost/C:/Temp/login.php?username=sdfg&password=sdfg&submit=Login"
also Sirke's Ansatz trifft es.
Es ist aber auch nicht schwer zu finden:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
<form action="login.php" method="post">
<table>
  <tr>
    <td>Name</td>
    <td><input type="text" name="username" size="20" class="input" value=""/></td>
  </tr>

  <tr>
    <td>Passwort</td>
    <td><input type="password" name="password" size="20" class="input" /></td>
  </tr>

  <tr>
    <td colspan="2"><input type="submit" name="submit" value="Login" class="button"/></td>
  </tr>
</table>


Gruß Horst


matze - Mi 26.11.08 19:14

Die Eigenschaft FollowRedirects ist bei solchen Sachen auch immer am Besten auf True zu setzen.
Ausserdem denke ich, solltest du mal einen Cookiemanager einbinden. Denn die Seite wird auf jeden Fall ihre Sessions in einem Cookie speichern.


JinJitsu107 - Mi 26.11.08 19:39

Wow danke schonmal für die zahlreichen Antworten.
Ich werd gleich mal Feedback posten.



/Wunderbar es hat funktioniert.
Hatte gedacht, das der button überflüssig ist, da der post ja ohnehin gesendet wird.
Vielen dank!



Also das wäre ja geschafft.
Fordere ich aber jetzt einen Link mit http.get(..) an, bekomme ich eine Seite mit "Nicht eingeloggt".
Cookiemanager hab ich draufgesetzt mit:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm2.FormCreate(Sender: TObject);
begin
  idhttp1.AllowCookies := true;
  idhttp1.CookieManager := IdCookieManager1;
  idhttp1.HandleRedirects := true;

end;


Mit ner session id seh ich bei der seite auch nichts. Komisch aber vielleicht kann mit jemand weiter helfen.
Danke schonmal


JinJitsu107 - Mi 26.11.08 21:57

Keiner ne Ahnung?

//Ok also in dem coockie is doch ne session id.
Ich schau jetzt mal wie ich die übergeben muss.

////Ah das ist komisch. In dem Cookie ist die session id drin. Dann müsste die seite den Cookies doch lesen!
Versteh ich nicht! Hilfe!


/////Komplett ohne sinn jetzt funktioniert es. Habe eigentlich nichts geändert. Nun gut danke für die hilfe!