AdamCziker Napisano Wrzesień 17, 2014 Zgłoś Share Napisano Wrzesień 17, 2014 Witam wszystkich serdecznie Tworzę program, którego zadaniem jest łączenie się ze stroną tworzoną dynamicznie (jsp) przy użyciu loginu i hasła. Co chcę osiągnąć - chcę, żeby program sprawdzał czy udało się poprawnie zalogować, a jeśli nie, to żeby zwracał komunikat "Błędny login lub hasło". Dla normalnych stron (html) kod działa bez problemu, jednak dla stron z rozszerzeniem jsp program pokazuje, że udało się połączyć (nawet gdy dane są niepoprawne). I tu moje pytanie - czy takie coś jest w ogóle możliwe? Korzystam ze środowiska Borland Delphi 7 Personal z doinstalowanymi komponentami Indy (wersja 10.1.5.0). Kod źródłowy (do wglądu) unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdCookieManager, StrUtils; type TForm1 = class(TForm) IdHTTP1: TIdHTTP; Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Button1: TButton; Memo1: TMemo; IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL; IdCookieManager1: TIdCookieManager; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var post: TStringList; poczatek, koniec: integer; aStream: TMemoryStream; HTML, authToken: string; fLogin, fHaslo: string; begin IdHTTP1.HandleRedirects := True; fLogin := Edit1.Text; fHaslo := Edit2.Text; HTML := IdHTTP1.Get('https://e-skok.pl/eskok/login.jsp'); poczatek := Pos('name="token" value="', HTML) + Length('name="token" value="'); koniec := PosEx('"', HTML, poczatek); authToken := copy(HTML, poczatek, koniec - poczatek); post := TStringList.Create; try post.Add('token=' + authToken); post.Add('username=' + fLogin); post.Add('password=' + fHaslo); try IdHTTP1.Request.ContentType:= 'application/json'; HTML:= IdHTTP1.Post('https://e-skok.pl/eskok/login.jsp', post); Memo1.Text:= HTML; Label1.Caption := 'YES'; except if IdHTTP1.ResponseCode = 401 then begin ShowMessage('Nieprawidłowy login lub hasło.'); Label1.Caption := 'NO'; end else Label1.Caption := ':)'; end; finally post.Free; end; end; end. Z góry dziękuję za zainteresowanie tematem i pomoc Link do komentarza Udostępnij na innych stronach More sharing options...
olesio Napisano Wrzesień 17, 2014 Zgłoś Share Napisano Wrzesień 17, 2014 Chłopie, ogarnij się! Po cholere piszesz ten sam wątek na 8623823384 forach?! Na 4p dostałeś już odpowiedzi. Na szybko z tego co patrzyłem pod Synapse (bo gardze Indykiem i nie używam tego pakietu od dawna ze względu na nieprzewidziane problemy) strona głowna wcale nie zwraca mi żadnego tokenu po GET w jej treści. Tak samo nie ma tego w treści strony wizytowanej pod prawdziwą przeglądarką. Najprostsza lamerska metoda przy stronach HTTPS żeby wiedzieć co na prawde słane jest POST'em, to zapis strony na dysk i podmiana adresów z HTTPS na HTTP. Ale czasem się może to nie powieść. Zobacz na kod pod tym adresem: http://pastebin.com/n6hzSFEm (nie wklejam go tutaj, bo forumowy parser niemal zawsze rozwala formatowanie czyniąc kod słabiej czytelnym). Także tutaj trzeba ogarnąc obsługe ich captchy. W ogóle powinieneś kontaktować się z bankiem w sprawie obsługi ich strony. Na ogół banki preferują do obsługi ich stron płatne API. Takie życie. Także będzie prościej, a nie modzisz coś po omacku i smarujesz na wszelkie możliwe fora netowe. Imo nie tędy droga. Pozdrawiam: olesio Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.