Skocz do zawartości

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


AdamCziker

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

Link do komentarza
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.

Pozdrawiam: olesio

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...