2012-10-04 8 views
9

Pytam, czy ktoś był na tyle uprzejmy, aby mi wyjaśnić, jak się zalogować na stronie z aplikacji Delphi. Wszystkie przykłady, które tu znalazłem okazały się dla mnie bezużyteczne lub robię coś złego. Mam dość wyszukiwania i kodu, który nie działa.Zaloguj się na stronie Delphi

Nie ma komunikatu o błędzie, dostaję nawet kod strony do Memo, ale wygląda na to, że jest to kod ze strony logowania (nie konto [panel kontrolny]) - wydaje się, że ten kod nie może w ogóle przekazać auth i nie wiem dlaczego .

Co jest złego w tym kodzie:

procedure Login; 
var 
HTTP: TIdHTTP; 
Param: TStringList; 
S: String; 
begin 
HTTP := TIdHTTP.Create(nil); 
HTTP.CookieManager := Main_Form.CookieManager; 
Param := TStringList.Create; 
Param.Clear; 
Param.Add('login=example'); 
Param.Add('password=example'); 

try 
HTTP.Get ('http://www.filestrum.com/login.html'); 
HTTP.Post('http://www.filestrum.com/login.html', Param); 
S := HTTP.Get ('http://www.filestrum.com/?op=my_account'); 
Main_Form.Memo2.Lines.Add(S); 
finally 
    HTTP.Free; 
    Param.Free; 
end; 
end; 

lub z tej wersji:

procedure Login; 
var 
HTTP: TIdHTTP; 
S: String; 
begin 
HTTP        := TIdHTTP.Create(nil); 
HTTP.CookieManager    := Main_Form.CookieManager; 
HTTP.Request.BasicAuthentication := True; 
HTTP.Request.Username   := 'example'; 
HTTP.Request.Password   := 'example'; 
HTTP.AllowCookies    := True; 
HTTP.HandleRedirects    := True; 

S := HTTP.Get ('http://www.filestrum.com/?op=my_account'); 
Main_Form.Memo2.Lines.Add(S); 
end; 

Używane Delphi XE2 i nie ma sposobu, aby ten kod działa i login. Podobnie jest z demo XE3. Jak już powiedziałem, jestem bardzo zmęczony, szukając jakiegoś rozwiązania, marnując dni i nic.

Proszę, trochę pomocy. Naprawdę tego potrzebuję.

+0

Ty też zmarnowane 2 akapity prosząc o pomoc (co już uczynił w sposób dorozumiany poprzez umieszczenie na pytanie), ale zupełnie zapomniałem wspomnieć, co się dzieje źle. Czas kompilacji, czas pracy, konkretne komunikaty o błędach? – GolezTrol

+0

Czy próbowałeś usunąć dodatkowe '/', które masz na 'http: //www.filestrum.com//? Op = my_account'? – TLama

+0

Nie ma komunikatu o błędzie, nic. Dostaję kod strony do Memo, ale wygląda na to, że nie przekazał auth. Ta sama nazwa użytkownika i hasło działają w przeglądarce Firefox. http://www.filestrum.com/?op=my_account - mój błąd, ale wciąż jest taki sam. Cokolwiek próbuję - nie mogę się zalogować z kodu. – Cohen

Odpowiedz

7

spróbować czegoś takiego:

function Login: string; 
var 
    IdHTTP: TIdHTTP; 
    Request: TStringList; 
    Response: TMemoryStream; 
begin 
    Result := ''; 
    try 
    Response := TMemoryStream.Create; 
    try 
     Request := TStringList.Create; 
     try 
     Request.Add('op=login'); 
     Request.Add('redirect=http://www.filestrum.com'); 
     Request.Add('login=example'); 
     Request.Add('password=example'); 
     IdHTTP := TIdHTTP.Create; 
     try 
      IdHTTP.AllowCookies := True; 
      IdHTTP.HandleRedirects := True; 
      IdHTTP.Request.ContentType := 'application/x-www-form-urlencoded'; 
      IdHTTP.Post('http://www.filestrum.com/', Request, Response); 
      Result := IdHTTP.Get('http://www.filestrum.com/?op=my_account');  
     finally 
      IdHTTP.Free; 
     end; 
     finally 
     Request.Free; 
     end; 
    finally 
     Response.Free; 
    end; 
    except 
    on E: Exception do 
     ShowMessage(E.Message); 
    end; 
end; 
+0

Więc 'redirect' nie jest przekierowanie? Brzmi dziwnie ... – TLama

+0

@ TLama: żądanie POST wystawia numer 302, więc po stronie klienta wydaje nowe żądanie GET – whosrdaddy

+0

Yesss .. ten działa! Faceci, dziękuję bardzo – Cohen

Powiązane problemy