2012-03-16 55 views
7

有人可以发布一个简单的例子,使用Delphi 2005的API的JSON POST请求。我发现了很多使用GET的例子,但API提供程序不允许通过HTTP GET请求,并且不支持URL编码参数。德尔福REST API发布样本

我是调用REST服务的新品(以前使用过SOAP),所以如果您需要更多信息,请让我知道。

回答

7

您只需使用Indy的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和你刚才问如何用Delphi执行一个HTTP POST。

+4

此代码泄漏一个TStringList实例,每次调用 – mjn 2012-03-18 07:08:41

+1

...如果在http.post()中引发异常,将泄漏内存(http + jsontosend实例)... – 2014-06-28 13:49:29

6

一种选择,使用我们的mORMot开源框架的某些部分:

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; 

请注意,这里的时候,发送到你可以构造使用custom variant storage,这将被转换为JSON文本的JSON内容服务器。