![]() |
AW: Login auf Homepage mit Indy
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... |
AW: Login auf Homepage mit Indy
Zitat:
Im Internet Explorer kann man z.B. mit F12 die ![]() Für die Browser Firefox, Chrome und Opera gibt es ähnliche Werkzeuge ( ![]() 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. |
AW: Login auf Homepage mit Indy
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:
Der ResonseCode 200 sagt ja "Die Anfrage wurde erfolgreich bearbeitet und das Ergebnis der Anfrage wird in der Antwort übertragen."
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} Nur mal zum verständniss, der Rückgabewert von "Post" sollte der Quelltext der neuen Seite sein, oder irre ich mich da? |
AW: Login auf Homepage mit Indy
Ist in dem empfangenen Quellcode vielleicht folgendes:
Code:
<meta http-equiv="refresh" content="5; URL=http://de.selfhtml.org/">
![]() 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. Zitat:
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 |
AW: Login auf Homepage mit Indy
Zitat:
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. |
AW: Login auf Homepage mit Indy
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:
Die Antwort vom Server: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
Code:
Nach dem Erfolgten LogIn mittels Browser wird diese URL angezeigt:
<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&SWEView=Show+Login+Status"> </HEAD> </HTML>
Code:
Und mein Code:
https://intra.net/start.swe?SWECmd=GotoView&SWEView=Show+Login+Status
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 |
AW: Login auf Homepage mit Indy
Liste der Anhänge anzeigen (Anzahl: 1)
Hey,
also die Webseite ist ja auch mehr so zusammengefummelt :D Zitat:
In deinem Code sind erstmal folgende Fehler:
Delphi-Quellcode:
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).
// 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'))); Wann immer du Parameter in diesem Format siehst:
Code:
Kannst du vom application/x-www-form-urlencoded ausgehen, also einfach wie GET Parameter. Multipart sieht anders aus.
SWEUserName=Name1+Name2&SWEPassword=Passwort&SWECmd=ExecuteLogin&SWENeedContext=false
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. |
AW: Login auf Homepage mit Indy
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 ;) Zitat:
Zitat:
allerdings hatte ich auch andere Proceduren getestet, wo es richtig war (bis auf die Groß/Kleinschreibung...) |
AW: Login auf Homepage mit Indy
Zitat:
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. |
AW: Login auf Homepage mit Indy
Ein seltenes Ereigniss ist aufgetreten:
Es klappt und ich weiß nicht warum... :gruebel: Vielleicht kann mir einer mal aufklären: Webseitenquelltext:
Code:
Die Website verlangt "Post" und laut allen Anleitungen bzw Ergebnissen der Suche müßte ich es so machen:
<Form method="POST" action="/start.swe?" name="Form1">
Delphi-Quellcode:
Hier bekomme ich immer den Quelltext der Startseite, komme aber nicht weiter
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); Mit Get allerdings klappt das Einloggen und ich bekomme den Quelltext der nachfolgenden Seiten:
Delphi-Quellcode:
:wiejetzt:
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! :dp: Gruß Torsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07: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