![]() |
einloggen mit INDY http
hi,
ich wollte gerne mich mit meinem programm bei meinem mobilfunkanbieter einloggen und meine pdf telefonrechnung automatisch runterladen lassen und mich wieder ausloggen. Nun happerts jedoch schon beim einloggen. ich habe zuvor mich noch nie irgendwo mit der indy komponente eingeloggt. Folgend kommt mein Versuch, vorab die erhaltene Fehlermeldung:
Code:
---------------------------
Programm1 --------------------------- Wert für IOHandler ist ungültig. --------------------------- OK ---------------------------
Delphi-Quellcode:
Leider finde ich die Dokumentation der Herangehensweise vom individuellen einlogvorgang dürftig im internet.
unit uMain;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdCookie, IdIntercept, IdLogBase, IdLogEvent, StdCtrls, IdCookieManager, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, StrUtils, ExtCtrls, ActiveX, Vcl.OleCtrls, SHDocVw; type TfrmMain = class(TForm) IdHTTP: TIdHTTP; IdCookieManager: TIdCookieManager; memLog: TMemo; IdLogEvent: TIdLogEvent; pnlMain: TPanel; btnLogin: TButton; btnLogout: TButton; lblEmail: TLabel; edtEmail: TEdit; lblPassword: TLabel; edtPassword: TEdit; WebBrowser1: TWebBrowser; Memo1: TMemo; Edit1: TEdit; Button1: TButton; procedure IdHTTPRedirect(Sender: TObject; var dest: string; var NumRedirect: Integer; var Handled: Boolean; var VMethod: TIdHTTPMethod); procedure btnLogoutClick(Sender: TObject); procedure btnLoginClick(Sender: TObject); procedure IdLogEventSent(ASender: TComponent; const AText, AData: string); procedure IdLogEventReceived(ASender: TComponent; const AText, AData: string); procedure IdCookieManagerNewCookie(ASender: TObject; ACookie: TIdCookie; var VAccept: Boolean); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var frmMain: TfrmMain; implementation {$R *.dfm} procedure WB_LoadHTML(WebBrowser: TWebBrowser; HTMLCode: string); var sl: TStringList; ms: TMemoryStream; begin WebBrowser.Navigate('about:blank'); while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages; if Assigned(WebBrowser.Document) then begin sl := TStringList.Create; try ms := TMemoryStream.Create; try sl.Text := HTMLCode; sl.SaveToStream(ms); ms.Seek(0, 0); (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)); finally ms.Free; end; finally sl.Free; end; end; end; procedure TfrmMain.btnLoginClick(Sender: TObject); var sHTMLCode, sURL, strQuelltext : String; iPos1, iPos2: Integer; sFormKey, sIV, sCheckCode: String; slParams: TStringList; begin slParams := TStringList.Create; slParams.Add('loginname='+edtEmail.Text); slParams.Add('password='+edtPassword.Text); strQuelltext := IdHTTP.Post('http://lounge.deutschlandsim.de/login', slParams); slParams.Free; WB_LoadHTML(WebBrowser1, strQuelltext); end; procedure TfrmMain.btnLogoutClick(Sender: TObject); begin IdHTTP.Get('http://lounge.deutschlandsim.de/logout'); end; procedure TfrmMain.Button1Click(Sender: TObject); begin Webbrowser1.Navigate(Edit1.Text); end; procedure TfrmMain.IdCookieManagerNewCookie(ASender: TObject; ACookie: TIdCookie; var VAccept: Boolean); begin if (ACookie.Path = '') then ACookie.Path :='/'; memLog.Lines.Add('New Cookie:'); //memLog.Lines.Add(' Comment: '+ACookie.comment); //memLog.Lines.Add(' Version: '+ACookie.Version); memLog.Lines.Add(' CookieText: '+ACookie.CookieText); memLog.Lines.Add(' ServerCookie: '+ACookie.ServerCookie); memLog.Lines.Add(' ClientCookie: '+ACookie.ClientCookie); memLog.Lines.Add(' Domain: '+ACookie.Domain); memLog.Lines.Add(' Expires: '+DateToStr(ACookie.Expires)); memLog.Lines.Add(' CookieName: '+ACookie.CookieName); memLog.Lines.Add(' Path: '+ACookie.Path); memLog.Lines.Add(' Value: '+ACookie.Value); memLog.Lines.Add(' DisplayName: '+ACookie.DisplayName); memLog.Lines.Add(''); end; procedure TfrmMain.IdHTTPRedirect(Sender: TObject; var dest: string; var NumRedirect: Integer; var Handled: Boolean; var VMethod: TIdHTTPMethod); begin if (VMethod = Id_HTTPMethodPost) then VMethod := Id_HTTPMethodGet; memLog.Lines.Add('Redirect:'); memLog.Lines.Add(' Dest: '+dest); memLog.Lines.Add(' NumRedirect: '+IntToStr(NumRedirect)); memLog.Lines.Add(' Handled: '+IntToStr(Integer(Handled))); memLog.Lines.Add(' Method: '+IntToStr(Integer(VMethod))); memLog.Lines.Add(''); end; procedure TfrmMain.IdLogEventReceived(ASender: TComponent; const AText, AData: string); begin memLog.Lines.Add('Received:'); memLog.Lines.Add(AData); memLog.Lines.Add(''); end; procedure TfrmMain.IdLogEventSent(ASender: TComponent; const AText, AData: string); begin memLog.Lines.Add('Sent:'); memLog.Lines.Add(AData); memLog.Lines.Add(''); end; end. Viele Grüße und danke bereits im vorraus! |
AW: einloggen mit INDY http
Webbasierte Loginseiten verwenden in der Regel HTTPS, da bei HTTP die eingegebenen Daten (Benutzername, Passwort) im Klartext übertragen würden.
Die Seite ![]() ![]() ![]() Das erklärt die Fehlermeldung, denn der Standard IOHandler von Indy unterstützt nur HTTP. Für HTTPS muss ein SSL/TLS IOHandler verwendet werden (und dazu gibt es sicher einige Treffer in der Forumssuche). Also:
|
AW: einloggen mit INDY http
hi,
danke für dein beitrag, ich habe es nun umgesetzt, werde jedoch nicht eingeloggt. ich habe den IOhandle den SSLhandle mitegeteilt: IdHTTP.IOHandler := SSL1; ich habe die direkte https als loginseite weitergegeben: IdHTTP.Post('https://lounge.deutschlandsim.de/login', slParams); und "libeay32.dll" & "ssleay32.dll" habe ich mir in der aktuellsten vesion ebenfalls besorgt und im "*.exe" Pfad beigelegt. Warum kann ich mich nun immernoch nicht einloggen? wer kann mir hier weiterhelfen? VG
Delphi-Quellcode:
procedure TfrmMain.btnLoginClick(Sender: TObject);
var sHTMLCode, sURL, strQuelltext : String; iPos1, iPos2: Integer; sFormKey, sIV, sCheckCode: String; slParams: TStringList; SSL1: TIdSSLIOHandlerSocketOpenSSL; begin slParams := TStringList.Create; slParams.Add('loginname='+edtEmail.Text); slParams.Add('password='+edtPassword.Text); SSL1 := TIdSSLIOHandlerSocketOpenSSL.Create(nil); SSL1.SSLOptions.Method := sslvSSLv23; IdHTTP.IOHandler := SSL1; strQuelltext := IdHTTP.Post('https://lounge.deutschlandsim.de/login', slParams); slParams.Free; WB_LoadHTML(WebBrowser1, strQuelltext); end; |
AW: einloggen mit INDY http
Und was passiert stattdessen? :glaskugel:
|
AW: einloggen mit INDY http
Zitat:
Lösungsalternativen: dem TWebbrowser Objekt die Cookies des Servers bekannt machen, oder die gesamte Interaktion (PDFs herunterladen) über die Indy HTTP Komponente abwickeln. Da Indy kein JavaScript unterstützt, ist diese Alternative nur umsetzbar wenn die Webseite JavaScript nicht voraussetzt. |
AW: einloggen mit INDY http
Du solltest zuerst einmal herausfinden, ob beim Einloggen JavaScript zwingend erforderlich ist.
Das lässt sich z.B. mit Firefox + NoScript AddOn testen. Falls ja, dann hast du mit Indy keine Chance dich einzuloggen weil Indy keinen JS-Interpreter an Bord hat. |
AW: einloggen mit INDY http
Hallo,
ich sehe deine Anmeldemethode nicht, die SSL IO Handler haben eine Menge Optionen ... Da ich was von TLS gehörig habe ![]() Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 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 by Thomas Breitkreuz