![]() |
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 ![]() ![]() Ich stell mir das so vor:
Delphi-Quellcode:
if form1.idHTTP.get='http://www.meineadresse.de/LoggedIn'
|
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:
Also:
TIdHTTP.Response.Location
Delphi-Quellcode:
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.
try
idHTTP.Post('http://uswusw', Params, Reply); except // Weiterleitung/Fehler abfangen end; if (idHTTP.Response.Location = 'http://www.meineadresse.de/LoggedIn') then lala; Grüße |
AW: idHTTP abfrage
Ich habe das so gemacht wie in deinem Beispiel.
Also so...
Delphi-Quellcode:
Jedoch kam immer die message: Username oder Passwort falsch.
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; Also wollte ich gucken, was ich denn da für Response.Location herausbekommen habe:
Delphi-Quellcode:
Da habe ich dann eine message bekommen, wo garnichts drinn stand!
else showmessage(idHTTP1.Response.Location);
Was mache ich falsch? PS: Ich finde deinen Hinweiß mit AllowRedirectes nicht. Kannst du das mal genauer erklären? |
AW: idHTTP abfrage
Hi,
also dann muss ich ein bisschen weiter ausholen. Am besten ist es wenn man sich erstmal ![]() Des Weiteren empfehle ich dir auch wenn du kein FireFox benutzt diesen zu installieren und die ![]() 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:
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.
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; |
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 |
AW: idHTTP abfrage
Oh,
Du hattest bereits gesagt, dass ich nach einem LINK suchen soll... Aber Problem bleibt. |
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.
|
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:
oder so?
showmessage(strstreamtostr(ReplyData));
Mach ich das richtig, wenn ich das hinter idHTTP.Post('http://....', PostData, ReplyData); setze?? |
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 |
AW: idHTTP abfrage
F1 ->>
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 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