2012-03-16 26 views
7

Qualcuno può pubblicare un semplice esempio di una richiesta JSON POST a un'API utilizzando Delphi 2005. Ho trovato numerosi esempi utilizzando GET ma il provider API non consente richieste tramite HTTP GET e non supporta la codifica URL parametri.Delphi REST API Posta campione

Sono nuovo di zecca per chiamare i servizi REST (ho usato SOAP in passato) quindi per favore fatemi sapere se avete bisogno di maggiori informazioni.

risposta

7

Si utilizza solo il componente TIdHTTP di Indy e si chiama il metodo Post. Passa l'URL come primo argomento e la tua stringa JSON come secondo argomento. Qualcosa di simile a questo:

procedure TForm1.Button1Click(Sender: TObject); 

    var jsonToSend:TStringList; 
     http:TIDHttp; 
    begin 
    http := TIDHttp.Create(nil); 
    http.HandleRedirects := true; 
    http.ReadTimeout := 5000; 
    jsonToSend:=TStringList.create; 
    jsonToSend.Add('{ Your JSON-encoded request goes here }'); 
    Memo1.Lines.Text:=http.Post('http://your.restapi.url', jsonToSend); 
    jsonToSend.Destroy; 
    http.Destroy; 
    end; 
end. 

Sto assumendo si è già in grado di codificare e decodificare il JSON e che sono stati solo chiedendo come eseguire un post HTTP utilizzando Delphi.

+4

questo codice perde un'istanza TStringList per chiamata – mjn

+1

... e perderà memoria (istanze http + jsontosend) se un'eccezione generata all'interno di http.post() ... –

6

Una possibilità, utilizzando una parte del nostro mORMot framework open source:

uses SynCrtSock, SynCommons; 
var t: variant; 
begin 
    TDocVariant.New(t); 
    t.name := 'john'; 
    t.year := 1982; 
    TWinHTTP.Post('http://servername/resourcename',t,'Content-Type: application/json'); 
end; 

Nota che qui si può costruire il contenuto JSON utilizzando un custom variant storage, che sarà convertito come testo JSON quando ha inviato alla server.