Autor Beitrag
JinJitsu107
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 26.11.08 18:11 
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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: 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.
ausblenden Quelltext
1:
if( isset($_POST['submit']) ) { ...					

Daher würde ich das als Test einfach mal mit anfügen:
ausblenden Delphi-Quelltext
1:
Filestream.AddFormField('submit''Login');					

Eventuell hast du damit schon Glück ;-)

LG Sirke
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: 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.

_________________
In the beginning was the word.
And the word was content-type: text/plain.
JinJitsu107 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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!