2012-03-16 5 views
7

Может ли кто-нибудь опубликовать простой пример запроса JSON POST в API с помощью Delphi 2005. Я нашел множество примеров с использованием GET, но поставщик API не разрешает запросы через HTTP GET и не поддерживает кодировку URL параметры.Образец сообщения Delphi REST API

Я новичок в вызовах служб REST (ранее использовали SOAP), поэтому, пожалуйста, дайте мне знать, если вам требуется дополнительная информация.

ответ

7

Вы должны использовать компонент Indys's TIdHTTP и вызвать метод Post. Передайте URL как первый аргумент и строку JSON в качестве второго аргумента. Что-то вроде этого:

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. 

Я предполагаю, что вы уже способны кодировать и декодировать JSON, и что вы просто спрашиваете, как выполнять HTTP POST с помощью Delphi.

+4

этот код утечки экземпляра TStringList за звонок – mjn

+1

... и будет утечка памяти (http + jsontosend экземпляры), если исключение поднято в http.post() ... –

6

Один из вариантов, используя некоторую часть нашего mORMot 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; 

Заметим, что здесь вы можете построить свой контент в формате JSON с использованием custom variant storage, который будет преобразован в JSON текста при отправке сервер.

Смежные вопросы