2012-10-04 3 views
9

Vorrei chiedere se qualcuno è stato così gentile da spiegarmi come accedere alla pagina web dall'app Delphi. Tutti gli esempi che ho trovato qui si sono dimostrati inutili o sto facendo qualcosa di sbagliato. Sono stanco della ricerca e del codice che non funziona.Accedi al sito web da Delphi

Non c'è alcun messaggio di errore, ho anche ricevuto il codice di pagina in Memo ma sembra codice dalla pagina di accesso (non dalla pagina [dashboard] dell'account) - sembra che questo codice non possa passare affatto e non so perché .

Cosa c'è di sbagliato in questo codice:

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; 

o con questa versione:

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; 

Usato Delphi XE2 e non v'è alcun modo per rendere questo codice in esecuzione ed effettuare il login. È lo stesso con la demo XE3. Come ho detto, sono davvero stanco di cercare una soluzione, sprecare giorni e niente.

Per favore ragazzi, qualche aiuto qui. Ne ho davvero bisogno.

+0

si hanno anche sprecato 2 paragrafi chiedere aiuto (che avete già fatto implicitamente dal distacco della domanda), ma del tutto dimenticato di dire cosa non va. Compila tempo, tempo di esecuzione, messaggi di errore specifici? – GolezTrol

+0

Hai provato a rimuovere l'extra '/' che hai in 'http: //www.filestrum.com//? Op = my_account'? – TLama

+0

Non c'è nessun messaggio di errore, niente. Ricevo il codice della pagina in Memo ma sembra che non sia passato l'autenticazione. Lo stesso nome utente e password funzionano da Firefox. http://www.filestrum.com/?op=my_account - il mio errore ma è sempre lo stesso. Qualunque cosa provi, non riesco ad accedere dal codice. – Cohen

risposta

7

provare qualcosa di simile:

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

In modo che 'redirect' non sia un reindirizzamento? Sembra strano ... – TLama

+0

@ TLama: la richiesta POST emette un 302 quindi è il lato client ad emettere una nuova richiesta GET – whosrdaddy

+0

Yesss .. questo funziona! Ragazzi, grazie mille – Cohen