AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Login auf Homepage mit Indy
Thema durchsuchen
Ansicht
Themen-Optionen

Login auf Homepage mit Indy

Ein Thema von Metschu · begonnen am 11. Feb 2013 · letzter Beitrag vom 21. Feb 2013
Antwort Antwort
Seite 2 von 2     12   
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#11

AW: Login auf Homepage mit Indy

  Alt 16. Feb 2013, 12:44
Danke für den Link, den hatte ich auch schon gefunden und das war auch sehr nützlich.
Nur scheitere ich jetzt ja daran, das die Seite Javascript verwendet...
Torsten
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#12

AW: Login auf Homepage mit Indy

  Alt 16. Feb 2013, 13:14
Nur scheitere ich jetzt ja daran, das die Seite Javascript verwendet...
Dann kommst du mit der Analyse des HTML-Datenverkehrs weiter.
Im Internet Explorer kann man z.B. mit F12 die Developer Tools öffnen und auf der Seite "Netzwerk" die Aufzeichnung starten.
Für die Browser Firefox, Chrome und Opera gibt es ähnliche Werkzeuge (Firebug).

Wenn du dann manuell einen Login durchführst siehst du alle Anfragen und Antworten des Browsers mit allen Headern, Cookies, usw. (Doppelklick auf die Zeile)
Achte gezielt auf einen POST; diesen müsstest du mit Indy nachprogrammieren.
  Mit Zitat antworten Zitat
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#13

AW: Login auf Homepage mit Indy

  Alt 17. Feb 2013, 13:09
Das mir F12 hatte ich im IE schon vorher ausprobiert. , mit wenig Ergebnis.
Nachdem ich nun FireFox mit FireBug installiert habe, sieht das ganze mit ein paar mehr Informationen viel besser aus - Danke für den Tip

Nur leider klappts immernoch nicht

Geskill hatte dazu ja schon ein nützliches Tutorial geschrieben und auch einige Beiträge in anderen Themen geschrieben.
Hier mal mein Code-Ausschnitt mit den Ergebnissen:
Delphi-Quellcode:
 memo1.Lines.Add(idHTTP.Post(Startseite,sList)); {<-Ergebniss ist der Quelltext der Loginseite - Ohne Fehlermeldung von wegen Passwort oder user falsch}
 memo1.Lines.Add('Location: '+idhttp.Response.Location);{<- Leer}
 memo1.Lines.Add('Text: '+idhttp.ResponseText);{<- HTTP/1.1 200 OK}
 memo1.Lines.Add('Code: '+IntToStr(idhttp.ResponseCode));{<-200}
Der ResonseCode 200 sagt ja "Die Anfrage wurde erfolgreich bearbeitet und das Ergebnis der Anfrage wird in der Antwort übertragen."
Nur mal zum verständniss, der Rückgabewert von "Post" sollte der Quelltext der neuen Seite sein, oder irre ich mich da?
Torsten
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

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

AW: Login auf Homepage mit Indy

  Alt 17. Feb 2013, 15:05
Ist in dem empfangenen Quellcode vielleicht folgendes:
Code:
<meta http-equiv="refresh" content="5; URL=http://de.selfhtml.org/">
http://de.selfhtml.org/html/kopfdaten/meta.htm

Dies ist eine veraltete Möglichkeit den Benutzer umzuleiten. Es gibt aber auch noch andere Möglichkeiten.

Ich glaube, nachdem der Login erfolgreich war, bekommst du einen Cookie gesetzt und musst nur noch die gewünschte Webseite aufrufen die du brauchst. Also nach dem jetzigen POST/Request bist du eingeloggt und kannst mit der HTTP Instanz weiterarbeiten.

Nur mal zum verständniss, der Rückgabewert von "Post" sollte der Quelltext der neuen Seite sein, oder irre ich mich da?
Es gibt dutzende Möglichkeiten wie man das macht - dem Webentwickler stehen da in der Vielfalt der Methoden keine Grenzen Es ist vielleicht etwas schade, dass es da keinen Standard für ein Login gibt, aber so wird es nie langweilig


PS: Also solltest du wirklich noch nicht eingeloggt sein, dann wäre es am einfachsten, du postest hier mal das Protokoll von einem komplettem Login mit einem Browser. Sonst raten wir hier nur herum XD
Sebastian
  Mit Zitat antworten Zitat
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#15

AW: Login auf Homepage mit Indy

  Alt 18. Feb 2013, 21:19
Ist in dem empfangenen Quellcode vielleicht folgendes:
Code:
<meta http-equiv="refresh" content="5; URL=http://de.selfhtml.org/">
http://de.selfhtml.org/html/kopfdaten/meta.htm
Der Quelltext, den mit Post empfange entspricht 1:1 dem von der Login Seite, also wo ich Username und Passwort eingeben muß, von daher gehe ich aus, das der Login nicht geklappt hat.

Wenn ich mit FireBug das ganze aufzeichne, bekomme ich den o.g. Quelltext als Antwort auf Post.
Arbeite ich dann mit der URL weiter, die die nach Refresh steht, bekomme ich wieder den Quelltext der Startseite

Den Quelltext von der HP, sowie die Post und Antwort von FireBug stell ich morgen mal ein.
Torsten
  Mit Zitat antworten Zitat
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#16

AW: Login auf Homepage mit Indy

  Alt 19. Feb 2013, 20:29
So, hier jetzt der Quelltext (Auszug):
Code:
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, height=device-height, user-scalable=yes,initial-scale=1.0, maximum-scale=5.0, minimum-scale=1.0">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-16">
<meta http-equiv="cache-control" content="no-cache">
<meta name="description" content="">
<title>Main LogIn</title>
<link rel="stylesheet" href="files/Dyn.css">
</head>
<body class="fitMldoc">
<div class="fitMlbody">
<div class="content">
<div class="c_box_mb">
<table class="b_top" cellpadding="0" cellspacing="0">
<tr>
<td class="tab_a_3">Main Login</td><td class="tab_ia_3"><a class="link02" href="start.swe?SWECmd=Logoff">Logoff</a></td>
</tr>
</table>
<Form method="POST" action="/start.swe?" name="Form1">
<table>
<tr>
<td class="pad_t w150X">Benutzername</td><td><input type="text" Name="SWEUserName" class="w130X"></td>
</tr>
<tr>
<td class="pad_t max200X">Passwort:</td><td><input type="Password" Name="SWEPassword" class="w130X"></td>
</tr>
<tr>
<td colspan="2">
<br>
<input Type="hidden" Name="SWECmd" Value="ExecuteLogin"><input Type="hidden" Name="SWENeedContext" Value="false">
<div class="bg_teaser_first" onclick="document.Form1.submit();" onmousedown="this.className='bg_teaser_first_md';" onmouseup="this.className='bg_teaser_first';" onmouseover="this.className='bg_teaser_first_md';" onmouseout="this.className='bg_teaser_first';">
<table class="c_in" cellpadding="0" cellspacing="0">
<tr>
<td class="w100XC"><img src="files/password2.gif" alt="" class="s_img40"></td><td>Anmelden</td><td class="c_rightcell_4"><img src="files/pfeil-vor.gif" alt="" width="4px" height="8px"></td>
... {ab hier nur noch Tabelle}

Hier die Post-Daten von FireBug:
Code:

SWECmd   ExecuteLogin
SWENeedContext   false
SWEPassword   Passwort {hier natürlich die richtigen Daten}
SWEUserName   Name1 Name2 {Namen mit Leerzeichen}

SWEUserName=Name1+Name2&SWEPassword=Passwort&SWECmd=ExecuteLogin&SWENeedContext=false
Die Antwort vom Server:
Code:
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<META http-equiv="cache-control" content="no-cache">
<META http-equiv="REFRESH" content="0;URL=start.swe?SWECmd=GotoView&amp;SWEView=Show+Login+Status">
</HEAD>
</HTML>
Nach dem Erfolgten LogIn mittels Browser wird diese URL angezeigt:
Code:
 https://intra.net/start.swe?SWECmd=GotoView&SWEView=Show+Login+Status
Und mein Code:

Delphi-Quellcode:
procedure TMainForm.Button2Click(Sender: TObject);
VAR IdHTTP:TIdHTTP; Params:TIdMultiPartFormDataStream;
    IdSSLIOHandlerSocketOpenSSL:TIdSSLIOHandlerSocketOpenSSL;
    IdCookieManager:TIdCookieManager; GetList:TStringList;

BEGIN
  IdHTTP := TIdHTTP.Create(NIL);
  GetList := TStringList.Create;
  IdCookieManager := TIdCookieManager.Create(NIL);
  IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(NIL);
  Params := TIdMultiPartFormDataStream.Create;
  TRY
    IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv3;
    IdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode := sslmUnassigned;
    IdHTTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
    IdHTTP.CookieManager := IdCookieManager;
    IdHTTP.AllowCookies := TRUE;

    Params.AddFormField('SWEUserName', String(UTF8Encode(LoginName)));
    Params.AddFormField('SWEpassword', String(UTF8Encode(Passwort)));
    Params.AddFormField('SWECmd', String(UTF8Encode('ExecuteLogin')));
    Params.AddFormField('SWEpassword', String(UTF8Encode('false')));

    GetList.Text := IdHTTP.Post(Startseite,params); {-> Startseite = https://intra.net/start.swe?}

    memo1.Lines.AddStrings(getlist); {-> Gleicher Quelltext wie Startseite vor einloggen}

  FINALLY
    FreeAndNil(Params);
    IdSSLIOHandlerSocketOpenSSL.Free;
    IdCookieManager.Free;
    GetList.Free;
    IdHTTP.Free;
  END;
END
Torsten
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

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

AW: Login auf Homepage mit Indy

  Alt 19. Feb 2013, 22:01
Hey,
also die Webseite ist ja auch mehr so zusammengefummelt
Zitat:
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, height=device-height, user-scalable=yes,initial-scale=1.0, maximum-scale=5.0, minimum-scale=1.0">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-16">

In deinem Code sind erstmal folgende Fehler:
Delphi-Quellcode:
// Es heißt "SWEPassword"
     Params.AddFormField('SWEpassword', String(UTF8Encode(Passwort)));

// UTF8Encode übernimmt Indy für dich! siehe mein Code (durch Angabe des Charsets)
     Params.AddFormField('SWECmd', String(UTF8Encode('ExecuteLogin')));

// Du meinst hier wohl "SWENeedContext"
     Params.AddFormField('SWEpassword', String(UTF8Encode('false')));
Okay, was du nicht wissen kannst es gibt mehrere Möglichkeiten Parameter zu übermitteln. Eine ist mit dem multipart, eine andere ist über ein TStringList (application/x-www-form-urlencoded).
Wann immer du Parameter in diesem Format siehst:
Code:
SWEUserName=Name1+Name2&SWEPassword=Passwort&SWECmd=ExecuteLogin&SWENeedContext=false
Kannst du vom application/x-www-form-urlencoded ausgehen, also einfach wie GET Parameter. Multipart sieht anders aus.

Ich habe beide Parametermöglichkeiten mit LoginA und LoginB im Code als Beispiel.

Ich habe etwas Struktur in den Code gebracht, das ist sicherlich noch weiter verbesserungswürdig, aber will dir ja nicht zuviel Arbeit wegnehmen.
Angehängte Dateien
Dateityp: pas uIndyLogin.pas (3,5 KB, 12x aufgerufen)
Sebastian
  Mit Zitat antworten Zitat
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#18

AW: Login auf Homepage mit Indy

  Alt 20. Feb 2013, 17:09
Nabends!

Danke schonmal für die Hilfe. Nur leider klappt das auch nicht.
Weder LoginA, noch LoginB führen zum Erfolg, immer das gleiche Ergebniss beim Quelltext.

Auch wenn man die Anmeldedaten absichtlich Falsch eingibt, ändert sich am Quelltext nichts.
Wenn ich das über den IE versuche, wird dann auf der Homepage angezeigt, das der Login Fehlerhaft war.

Die auszuführende Procedure als Result von der Funktion hab ich auch mal angepasst

In deinem Code sind erstmal folgende Fehler:
Delphi-Quellcode:
// Es heißt "SWEPassword"
     Params.AddFormField('SWEpassword', String(UTF8Encode(Passwort)));
Ich dachte Groß-/Kleinschreibung wäre da egal...


In deinem Code sind erstmal folgende Fehler:
Delphi-Quellcode:
// Du meinst hier wohl "SWENeedContext"
     Params.AddFormField('SWEpassword', String(UTF8Encode('false')));
Ups, Fehler beim Copy...
allerdings hatte ich auch andere Proceduren getestet, wo es richtig war (bis auf die Groß/Kleinschreibung...)
Torsten
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

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

AW: Login auf Homepage mit Indy

  Alt 20. Feb 2013, 23:12
Danke schonmal für die Hilfe. Nur leider klappt das auch nicht.
Weder LoginA, noch LoginB führen zum Erfolg, immer das gleiche Ergebniss beim Quelltext.
Dann kommt der POST-Request nicht richtig an. Tippe mal das es mit dem SSL Probleme gibt.

Gibt folgende Möglichkeiten (bei beiden kann ich dir leider nicht weiterhelfen):

a. Du probierst mir der Indy SSL Komponente bisschen rumzuspielen ggf. spezielles Zertifikat einjagen damit das klappt.

b. Ihr behebt das SSL Problem serverseitig. Wenn schon jeder normale Webbrowser dort versagt.

Das die TWebbrowser Komponente in Zukunft funktioniert ist ja keineswegs garantiert. Es hängt ja alles davon ab, auf welchem Klienten das Programm ausgeführt wird. Ich kann mir vorstellen, dass der IE / das OS nicht das Neuste ist.
Sebastian
  Mit Zitat antworten Zitat
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#20

AW: Login auf Homepage mit Indy

  Alt 21. Feb 2013, 21:07
Ein seltenes Ereigniss ist aufgetreten:

Es klappt und ich weiß nicht warum...

Vielleicht kann mir einer mal aufklären:

Webseitenquelltext:
Code:
<Form method="POST" action="/start.swe?" name="Form1">
Die Website verlangt "Post" und laut allen Anleitungen bzw Ergebnissen der Suche müßte ich es so machen:
Delphi-Quellcode:
with LParamsList do
 begin
  Add('SWEUserName=' + ALoginName);
  Add('SWEPassword=' + ALoginPassword);
  Add('SWECmd=ExecuteLogin');
  Add('SWENeedContext=false');
 end;

 LResponse := AIdHTTP.post('https://intra.net/start.swe?', LParamsList, LEnc);
Hier bekomme ich immer den Quelltext der Startseite, komme aber nicht weiter

Mit Get allerdings klappt das Einloggen und ich bekomme den Quelltext der nachfolgenden Seiten:
LResponse := AIdHTTP.get('https://intra.net/start.swe?SWEUserName=Name1+name2&SWEPassword=DasPasswort&SWECmd=ExecuteLogin&SWENeedContext=false');

(Eigentlich sollten die "Get" und "Post" in den Quelltexten auch rot markiert werden, aber anscheinend kann man im Code keine Farben einstellen)


Auf jeden fall schonmal danke an alle für die bisherigen Unterstützung!

Gruß

Torsten
Torsten
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 22:04 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