Dane ze strony uzytkowika Świstak

0

Witam!
Mam taki oto problem. Musze zrobic opcje w prgramie ktora pobiera dane ze strony uzytkownika aukcji swistak. Niestety mam cholerny problem z zalogowaniem sie. Prawdpopodobnie javascript cos kreci z ciastkami. Uzywam Indy, komponenty wizualne jak IE nie wchodza w gre. Pomozcie. Nie mam problemu
z innymi systemami www, tylko z tym jednym. Oczywiscie mam komponenty ssl, i cookie manager,
pliki dll do sll oczywiscie sa w katalogu z projektem, pisze by uprzedzic oczywiste odpowiedzi.

    Input.WriteString(Format('login=%s&pass=%s&save=%s&back_url=%s&d=%s', [Edit_Login.Text, Edit_Pass.Text,
'on', '/konto.html', 'www']));
idHTTP1.Post('https://ssl.swistak.pl/login.html?form_login=1', Input, Output);

otrzymuje kod html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="pl">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
<title>?wistak</title>
<link rel="stylesheet" type="text/css" media="screen" href="/style.css" />
<script type="text/javascript" language="javascript1.2" src="/swistak.js"></script>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<script type="text/javascript">
location="http://www.swistak.pl/login.html?error_no=1&back_url=";
</script>
<div style="width: 500px; border: 1px solid #dddddd; padding: 10px; margin: 10px; background-color: #fafafa;">
Za chwilę zostaniesz przekierowany do odpowiedniej strony.<br />
Jeżeli nic się nie dzieje, kliknij <a href="http://www.swistak.pl/login.html?error_no=1&back_url=">tutaj</a>.<br />
<br />
Je?li przy każdym logowaniu widzisz ten komunikat, przeczytaj <a href="http://www.swistak.pl/pomoc.html?id=137">pomoc</a>.
</div>
</body>
</html>

no i teraz gdy chce przejsc Od razu na strone uzytkownika http://www.swistak.pl/konto.html
to znow otwiera sie strona logowania! :-(( poratujcie mnie prosze.

0

masz tu kod z większego programu. Musisz sobie tylko SSLa dodać. Całość jako wątek bo tak potrzebowałem

unit PasswordThread;

interface

uses
  IdHTTP,
  IdCookieManager,
  Classes;

type
  TPasswordSercher = class(TThread)
  private
    Forum: TIdHTTP;
    CookieMen: TIdCookieManager;
    Params: TStringList;
    URL: string;
    Pass: string;
  protected
    procedure Execute; override;
  public
    constructor Create(AURL, ALogin, APass: string);
    destructor Destroy; override;
  end;

implementation

uses
  SysUtils;

{ TPasswordSercher }

constructor TPasswordSercher.Create(AURL, ALogin, APass: string);
begin
  FreeOnTerminate := True;
  Forum := TIdHTTP.Create(nil);
  CookieMen := TIdCookieManager.Create(nil);
  Forum.CookieManager := CookieMen;
  Params := TStringList.Create;
  Params.Clear;
  //jeśli dobrze podałeś parametry to będzie to tak
  Params.Values['login'] := ALogin;
  Params.Values['pass'] := APass;
  Params.Values['save'] := 'on';
  Params.Values['back_url'] := '/konto.html';
  Params.Values['d'] := 'www';
  URL := AURL;
  inherited Create(False);
end;

destructor TPasswordSercher.Destroy;
begin
  FreeAndNil(CookieMen);
  FreeAndNil(Forum);
  inherited;
end;

procedure TPasswordSercher.Execute;
  function GetHostFromUrl(Url: string): string;
  var
    i: Integer;
  begin
    if Pos('http://', Url) <> 0 then
      Delete(Url, 1, 7);
    i := Pos('/', url);
    while i <> 0 do
    begin
      Delete(url, i, 255);
      i := Pos('/', url);
    end;
    Result := 'http://' + url;
  end;
  procedure SetCookies;
  var
    i: integer;
  begin
    for i := 1 to CookieMen.CookieCollection.Count do
      Forum.Request.RawHeaders.Add('Cookie' +
      Forum.Request.RawHeaders.NameValueSeparator +
      CookieMen.CookieCollection.Items[i - 1].CookieText);
  end;
var
  HTML: string;
  Cookies: TStringList;
  i: Integer;
begin
  Cookies := TStringList.Create;
    while not Terminated do
    begin
      Cookies.Clear;
      // pobranie cookie
      html := Forum.Get(GetHostFromUrl(URL));
      for i := 1 to CookieMen.CookieCollection.Count do
        Cookies.Add(CookieMen.CookieCollection.Items[i - 1].CookieText);

      SetCookies;
      Forum.HandleRedirects := False;// ehem. now this made the buzz, because the cookies were not set when following the redirect
      try
        HTML := Forum.Post(URL, Params);// now do the log in
      except
        on E: EIdHTTPProtocolException do
        begin
          if E.ReplyErrorCode = 302 then
          begin
            // now this is the redirect
            // get the next cookie (this will be the userid)
            for i := 1 to CookieMen.CookieCollection.Count do
              Cookies.Add(CookieMen.CookieCollection.Items[i - 1].CookieText);
            SetCookies;
            html := Forum.Get(Forum.Response.Location);// follow redirect
          end
          else
            E.Create(E.Message);
        end;
      end;
      //tu w html powinieneś mieć źródło strony do której przenosi Cię po zalogowaniu
    end;
    FreeAndNil(Cookies);
end;

end.

testowane na phpbb i tam się ładnie loguje

0

Mistrzu nie wiem jak Ci dziekowac :)

0

Jest Problem.
Tak jak w przypadku windowsa zadzialalo bez problmeu, tak pod linuxem (Kylix 3 proff + Indy 9 - pod win tez indy9)
znow zada logowania.

:(

0

ew czy jest mozliwosc (i jak to zrobic) uruchomienia programu napisanego pod winde ktory mi zrobi te operacjew tym systemie aukcyjnym pod Linuxem z poziomu programu pod wine? Program bedzie chodzic na kompie bez Xow, jest napisany na konsole.

1 użytkowników online, w tym zalogowanych: 0, gości: 1