Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   idHTTP abfrage (https://www.delphipraxis.net/156614-idhttp-abfrage.html)

Haris2201 8. Dez 2010 18:57

idHTTP abfrage
 
Wie kann ich über den if-Befehl abfragen, ob eine anmeldung erfolgreich war, wenn wir davon ausgehen, dass nach der anmeldung vom server ein request kommt, in dem eine vordefenierte adresse kommt.

z.B. anmeldung war auf http://www.meinadresse.de/LogIn erfolgreich -> du wirst auf http://www.meineadresse.de/LoggedIn

Ich stell mir das so vor:
Delphi-Quellcode:
if form1.idHTTP.get='http://www.meineadresse.de/LoggedIn'

geskill 8. Dez 2010 23:07

AW: idHTTP abfrage
 
Hallo,
nachdem du mittels POST die Daten an den Server gesendet hast kannst du auf die Antwortdaten den Servers zugreifen, z.b. auch wohin der deine Abfrage weiterleitet.
Code:
TIdHTTP.Response.Location
Also:
Delphi-Quellcode:
try
  idHTTP.Post('http://uswusw', Params, Reply);
except
  // Weiterleitung/Fehler abfangen
end;

if (idHTTP.Response.Location = 'http://www.meineadresse.de/LoggedIn') then
  lala;
Beachte aber, wenn du AllowRedirects aktiviert hast wirst du automatisch weitergeleitet und erhältst womöglich ein anderes Ergebnis, falls du das deaktiviert hast und der Server trotzdem weiterleiten möchte bekommst du eine HTTP 302 Fehlermeldung die du dann abfangen muss.

Grüße

Haris2201 9. Dez 2010 15:06

AW: idHTTP abfrage
 
Ich habe das so gemacht wie in deinem Beispiel.

Also so...
Delphi-Quellcode:
          PostData.WriteString('/Login user='+user+'&password='+passwort');
          idHTTP1.Request.ContentType:='application/x-www-form-urlencoded';
          try begin
            idHTTP1.Post('http://www.meineadresse.de', PostData, Rueckgabe);
            if (idHTTP1.Response.Location = 'http://www.meineadresse.de/LoggedIn') then
            begin
              form1.Visible:=false;
              form2.Visible:=true;
            end
          else showmessage('Username oder Passwort falsch!');
          end
          except
            showmessage('Du hast keine Internetverbindung!');
          end;
Jedoch kam immer die message: Username oder Passwort falsch.

Also wollte ich gucken, was ich denn da für Response.Location herausbekommen habe:
Delphi-Quellcode:
else showmessage(idHTTP1.Response.Location);
Da habe ich dann eine message bekommen, wo garnichts drinn stand!

Was mache ich falsch?


PS: Ich finde deinen Hinweiß mit AllowRedirectes nicht. Kannst du das mal genauer erklären?

geskill 9. Dez 2010 17:24

AW: idHTTP abfrage
 
Hi,
also dann muss ich ein bisschen weiter ausholen. Am besten ist es wenn man sich erstmal Wireshark besorgt, damit kann man dann den kompletten Netzwerkverkehr analysieren und du erhältst dann genau mit welchen Werten der Server antwortet. Also einfach mal manuell mit dem Browser einloggen und Wireshark mitloggen lassen.

Des Weiteren empfehle ich dir auch wenn du kein FireFox benutzt diesen zu installieren und die Web Developer Erweiterung zu installieren, damit kannst du die HTML Formularfelder auslesen ohne das man im Quellcode wühlen muss.

Nun zum "AllowCookies" damit kann man sagen, das Indy automatisch weiterleiten soll (klappt aber auch nicht immer :mrgreen:), du kannst dies nach deinen Wünschen entsprechend aktivieren/deaktivieren.

So nun zu deinem Code, was ich da sehe ist ganz schlechter Stil!

Hier mal ein Muster wie sowas bei mir im Groben aufgebaut ist:
Delphi-Quellcode:
  with TIdHTTP.Create(nil) do
    try
      // ggf. Proxy, gZip, SOCKS, CookieManager, SSL ...

      Request.ContentType:='application/x-www-form-urlencoded';
      // ggf. weitere Werte, andere Browserkennung usw.

      Params := TStringStream.Create(''); // bei ISO
      // für UTF-8 Params := TStringStream.Create('', CP_UTF8);
      ReplyData := TStringStream.Create('');
      try
        // Ich bezweifle stark, dass es ein Eingabefeld mit diesem Namen gibt!
        // Bei nicht UTF-8 Webseiten ist es im Regelfall so, dass man Sonderzeichen escapen muss!
        // Dort hilft HTTPEncode() aus der Unit "HTTPApp"
        // PostData.WriteString('/Login user='+user+'&password='+passwort');
        try
          Post('http:', PostData, ReplyData);
        except
           // Fehlerbehandlung
        end;
      finally
        ReplyData.Free;
        Params.Free;
      end;
    finally
      Free;
    end;
Ob oder ob man nicht angemeldet ist würde ich auch anders prüfen! Wenn man Angemeldet ist gibt es meisten einen einmaligen Logout-Link, den würde ich suchen. Früher oder später wirst du aber um RegEx nicht herumkommen und solltest dich da mal zu einarbeiten.

Haris2201 9. Dez 2010 17:49

AW: idHTTP abfrage
 
Hi geskill,

Ich benutze schon liveHTTP headers.
Hab mir trotzdem Web Devolper gedownloaded.

Wenn ich nun die Anmeldedaten abschicke und ich weiss welche Seite jeztz kommen wird, soll ich also den Abmeldebutton suchen lasse.
Jedoch ist da nur ein Link zum abmelden. Der geht dann so in etwa: "http://www.meineadresse.de/LogOut".
Wie soll ich das den bitte auslesen.

Bin, wie du sicher gemerkt hast, ein ziemlicher Delphi-Noob xD

Haris2201 9. Dez 2010 19:08

AW: idHTTP abfrage
 
Oh,

Du hattest bereits gesagt, dass ich nach einem LINK suchen soll...

Aber Problem bleibt.

geskill 9. Dez 2010 19:28

AW: idHTTP abfrage
 
uiui, also eigentlich dachte ich es wäre klar. In der Variable "ReplyData" wird doch die HTML Rückgabe vom Server gespeichert. Dann kannst du doch einfach mittels Pos("/LogOut", ReplyData.Datastring) > -1 prüfen ob du angemeldet bist.

Haris2201 10. Dez 2010 06:23

AW: idHTTP abfrage
 
Ja,

Aber bei mir komt immer true (also meint das prog., dass ich angemeldet bin?).
Gibt es nicht so einen Befehl womit man Stringstream als string ausgeben lassen kann?

Delphi-Quellcode:
showmessage(strstreamtostr(ReplyData));
oder so?

Mach ich das richtig, wenn ich das hinter idHTTP.Post('http://....', PostData, ReplyData); setze??

geskill 10. Dez 2010 08:43

AW: idHTTP abfrage
 
per TStringStream.DataString kommst du an den string, aber das habe ich doch oben in dem Beispiel mit Pos gezeugt :roll:

Mach dich mal bitte mit der Hilfe vertraut, da steht alles drin, wie du die Aufrufparameter setzt! -> F1

Haris2201 10. Dez 2010 13:19

AW: idHTTP abfrage
 
F1 ->>

Zitat:

warum kann ich keine hilfe von diesem programm erhalten?

Die hilfe für dieses programm wurde im windows-hilfeformat erstellt. Dieses format hängt von einem feature ab, das in dieser version von windows nicht enthalten ist. Sie können jedoch ein programm herunterladen, mit dem sie die im windows-hilfeformat erstellte hilfe anzeigen können.

Weitere informationen finden sie auf der website microsoft hilfe und support (möglicherweise in englischer sprache).



Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 Uhr.

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