Newsgroup: it.comp.lang.delphi
Titolo: HELP! come fare il "POST" con i parametri e leggere cosa ritorna...

Salve amici....sono 4 ore che cerco in rete...ma niente... quindi mi rivolgo
a voi...
Dovrei fare un semplice programmino che non fà altro che mandare 2 parametri
ad una pagina web tramite il metodo "POST" e vedere cosa ritorna, niente d+
il mio sito ha la pagina che riceve i dati fatta così (in html)
<form action="
http://www.mysite/login.asp
" method="POST">
<input type="Hidden" name="redirect" value="">
<font face="MS Sans Serif"><font color="#000000"><small><small>
Pin
</small></small></font><br>
</font><input type="text" name="pin" size="7">
<font face="MS Sans Serif"><font
color="#000000"><small><small>Pin2</small></small></font><br>
</font><input type="password" name="pin2" size="7"><input border="0"
src="/images/entra.gif" name="I1" hspace="7" alt="Entra"
type="image" width="35" height="11">
</form>
</form>
Io vorrei dal mio programma immettere i dati Pin e Pin2 in 2 variabili e
madarle alla pagina (ovviamente con il metodo POST come si aspetta) e vedere
cosa torna indietro.
Mi stò scervellando... who help me?
Many thanks :)

 Mi str scervellando... who help me?
Suite Indy, TIdHTTP, c'e anche un demo compreso in D6 e D7...

> Suite Indy, TIdHTTP, c'e anche un demo compreso in D6 e D7...
eh...ma non ci ho capito un tubo :°( letto e riletto 100000 volte...

 eh...ma non ci ho capito un tubo :0( letto e riletto 100000 volte...
Che versione di Delphi hai?
Suite Indy => 
http://www.indyproject.org
TIdHTTP => Il componente che devi usare
D6 e D7 => In Delphi 6 e Delphi 7 e' compresa una versione della Suite 
Indy con relativi demo nella cartella Demos\Indy. Tra questi che anche 
un demo HTTPClient che fa il GET ed il POST tramite HTTP.
Vuoi anche i biscotti con il latte caldo ...

 eh...ma non ci ho capito un tubo :°( letto e riletto 100000 volte...
bè pure io ho i miei problemi a farlo funsionare comunque prova così..
procedure TForm1.Button1Click(Sender: TObject);
Var
STR:TStringList;
FS:TFileStream;
begin
Str:=TstringList.Create;
FS:=TFileStream.Create('Response.Html',fmCreate);
Str.Add('pin1='+Edit1.Text);//aggiungi i campi che il tuo sito richiede
Str.Add('pin2='+Edit2.Text);
idHttp1.Post(
http://www.mysite/login.asp,Str,Fs);//
Str.Free;
FS.Free;
end;
Se sbaglio correggetemi
ciao
erik

 bh pure io ho i miei problemi a farlo funsionare comunque prova cosl..
Questo funziona di sicuro:
function UrlEncode(const DecodedStr: string; Pluses: Boolean): string;
var
  I: Integer;
begin
  Result := '';
  if Length(DecodedStr) > 0 then
    for I := 1 to Length(DecodedStr) do
    begin
      if not (DecodedStr[I] in ['0'..'9', 'a'..'z',
        'A'..'Z', ' ']) then
        Result := Result + '%' + IntToHex(Ord(DecodedStr[I]), 2)
      else if not (DecodedStr[I] = ' ') then
        Result := Result + DecodedStr[I]
      else
      begin
        if not Pluses then
          Result := Result + '%20'
        else
          Result := Result + '+';
      end;
    end;
end;
procedure TForm1.ThreadStart;
var
  Params: TStringList;
  Url: string;
  fHTTP: TIdHTTP;
  tmp: integer;
  fCookieManager: TIdCookieManager;
begin
  Params := TStringList.create();
  try
    Params.Add('user=' + UrlEncode ('pippo', false));
    Params.Add('password=' + UrlEncode ('pippo123', false));
    HTTP.HandleRedirects := True;
    Url := '
http://www.miosito.com/post.php
';
    try
     Memo1.Lines.Text := HTTP.Post(Url, Params);
    except
    end;
  finally
    Params.Free;
  end;
end;

Ok...sembra funzionare....xò c'è un bug...
Se ad esempio il login è sbagliato (pin sbagliati) funge...se è esatto
avviene un'eccezione ... (che stranamente non viene intercettata dal try
except...
L'eccezione viene generata nella unit idHTTP
...raised exception class EIdHTTPProtocolException with message 'HTTP/1.1
405 Method not allowed " Process Stopped...
Idee?
Cmq grazie! almeno riesco a vedere quando il pin è sbagliato...

 L'eccezione viene generata nella unit idHTTP
Durante il debugging, l'eccezione viene comunque visualizzata, hai 
provato a forzare il sollevamento (usando pin volutamente errati) nel 
file compilato fuori dall'IDE, li l'eccezione dovrebbe essere stata 
raccolta dal blocco.

"Setec Astronomy" <setec@_NO_NOSPAM_freemail.it> ha scritto nel messaggio
news:fciUa.204222$Ny5.5...@twister2.libero.it...

Fiuuuuuuu fiuuuuuuuuuuuuuu (fischietto.......) eh eh eh eh....possibile che
mi sia scordato ciň?!!? (si......)  :P
Grazie boss!

Ora cmq, rimane il fatto che non capisco il perchè dell'eccezione....

 Ora cmq, rimane il fatto che non capisco il perchh dell'eccezione....
Il componente e' fatto cosi. Normalmente il protocollo HTTP restituisce 
un codice 200 quando non vi sono stati errori, in alternativa 
restituisce altri codice. In caso di errore restituiscecodici tipo 500, 
550 etc. Se guardi nel sorgenti capisci immediatamente, con try except 
puoi intercettare un errore durante la comunicazione e provi rimedio.