Skocz do zawartości
Zaloguj się, aby obserwować  
AdamCziker

[Delphi] Łączenie ze stroną *.jsp przy pomocy Indy

Polecane posty

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 :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się
Zaloguj się, aby obserwować  

×