IdHTTP1->Post hängt sich auf, wenn die Daten falsch sind



  • Hallo,
    ich habe ein Login formular in PHP erstellt und möchte mich über mein Borland Projekt einloggen.

    Wenn Benutzername und Passwort korrekt sind, dann funktioniert alles wunderbar, aber wenn das Passwort falsch ist, dann hängt sich das Program,m für eine Zeitlang auf, was kann ich dagegen tuhen?

    Hier ist mal der Code:

    strcpy(params, "act=login&loginname=bruce85&loginpasswort=test");
    
      OutStream->Write(params, strlen(params));
    
      IdHTTP1->Request->ContentType="application/x-www-form-urlencoded";
    
      IdHTTP1->Post("http://deineseite.de/login.php", OutStream, InStream);
      InStream->Position=0;
      Memo1->Lines->LoadFromStream(InStream);
    

    Gibt es ein befehl, wenn die Daten falsch sind, das es nicht hängt sondern eine fehlermeldung erscheint?

    Application->MessageBox("Die Logindaten sind ungültig.","Hinweis!",MB_OK);
    

    Ich bedanke mich schonmal im Voraus.

    MfG



  • Vermutlich bearbeitest du in deinem PHP-Script den Fall der ungültigen Nutzerdaten nicht korrekt. Ich tippe mal, dass einfach kein Response an den Client geschickt wird. In diesem Fall würde IdHttp warten, bis es zum Timeout kommt. Du mußt also einen entsprechenden Fehlercode im HTTP-Header setzen und als Nutzdaten eine Klartextfehlermeldung.



  • Danke für die schnelle antwort.

    Kann man nicht einfach in Borland Projekt was einbauen, damit es nicht mehr hängt oder muss ich das schon in der PHP datei machen?

    MfG



  • Das kommt drauf an, wo der Fehler liegt. Wenn der Fehler im PHP liegt, sollte er auch dort behoben werden. Schau doch einfach mal, was ResponseCode für einen Wert enthält.



  • Das liegt wohl an meiner Seite.

    Gibt es eine andere möglichkeit das zu umgehen, also, wenn innerhalb von 1 Sekunde nix zruückgegeben wird, damit man diesen Code überspringen kann:

    Memo1.Text := idHTTP1.Post('http://deineseite.de/login.php', Strings);

    MfG



  • TidHTTP wird warten bis ein Timeout kommt.
    Sonst kannst du das in einen Thread auslagern und den dann nach einer gewissen Zeit abschiessen.



  • Achso, Danke.

    Noch eine Frage habe ich.
    Kann man das auch mit TClientSocket machen?
    Also die Daten zum PHP Script senden mit Post?

    MfG



  • Klar, du musst dann ein HTTP-konformes POST-Kommando zusammenbauen und abschicken.


Anmelden zum Antworten