AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

idHTTP abfrage

Ein Thema von Haris2201 · begonnen am 8. Dez 2010 · letzter Beitrag vom 10. Dez 2010
Antwort Antwort
Haris2201

Registriert seit: 30. Sep 2010
31 Beiträge
 
Delphi 7 Enterprise
 
#1

idHTTP abfrage

  Alt 8. Dez 2010, 19:57
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:
if form1.idHTTP.get='http://www.meineadresse.de/LoggedIn'
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#2

AW: idHTTP abfrage

  Alt 9. Dez 2010, 00:07
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
Sebastian
  Mit Zitat antworten Zitat
Haris2201

Registriert seit: 30. Sep 2010
31 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: idHTTP abfrage

  Alt 9. Dez 2010, 16:06
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:
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?
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#4

AW: idHTTP abfrage

  Alt 9. Dez 2010, 18:24
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 ), 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.
Sebastian
  Mit Zitat antworten Zitat
Haris2201

Registriert seit: 30. Sep 2010
31 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: idHTTP abfrage

  Alt 9. Dez 2010, 18:49
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
  Mit Zitat antworten Zitat
Haris2201

Registriert seit: 30. Sep 2010
31 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: idHTTP abfrage

  Alt 9. Dez 2010, 20:08
Oh,

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

Aber Problem bleibt.
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#7

AW: idHTTP abfrage

  Alt 9. Dez 2010, 20:28
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.
Sebastian
  Mit Zitat antworten Zitat
Haris2201

Registriert seit: 30. Sep 2010
31 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: idHTTP abfrage

  Alt 10. Dez 2010, 07:23
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?

showmessage(strstreamtostr(ReplyData)); oder so?

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

Geändert von Haris2201 (10. Dez 2010 um 07:26 Uhr) Grund: noch ne frage
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#9

AW: idHTTP abfrage

  Alt 10. Dez 2010, 09:43
per TStringStream.DataString kommst du an den string, aber das habe ich doch oben in dem Beispiel mit Pos gezeugt

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

Registriert seit: 30. Sep 2010
31 Beiträge
 
Delphi 7 Enterprise
 
#10

AW: idHTTP abfrage

  Alt 10. Dez 2010, 14:19
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).

Geändert von Haris2201 (10. Dez 2010 um 14:19 Uhr) Grund: windows
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 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