【发布时间】:2012-03-16 19:47:17
【问题描述】:
有人可以使用 Delphi 2005 向 API 发布 JSON POST 请求的简单示例吗?我发现了许多使用 GET 的示例,但 API 提供程序不允许通过 HTTP GET 请求并且不支持 URL 编码参数。
我是调用 REST 服务的新手(过去曾使用过 SOAP),所以如果您需要更多信息,请告诉我。
【问题讨论】:
有人可以使用 Delphi 2005 向 API 发布 JSON POST 请求的简单示例吗?我发现了许多使用 GET 的示例,但 API 提供程序不允许通过 HTTP GET 请求并且不支持 URL 编码参数。
我是调用 REST 服务的新手(过去曾使用过 SOAP),所以如果您需要更多信息,请告诉我。
【问题讨论】:
您只需使用 Indy 的 TIdHTTP 组件并调用 Post 方法。将 URL 作为第一个参数传递,将您的 JSON 字符串作为第二个参数传递。像这样的:
procedure TForm1.Button1Click(Sender: TObject);
var
jsonToSend: TStringList;
http: TIdHTTP;
begin
http := TIdHTTP.Create(nil);
try
http.HandleRedirects := True;
http.ReadTimeout := 5000;
jsonToSend := TStringList.create;
try
jsonToSend.Add('{ Your JSON-encoded request goes here }');
http.Post('http://your.restapi.url', jsonToSend);
finally
jsonToSend.Destroy;
end;
finally
http.Destroy;
end;
end;
我假设您已经能够对 JSON 进行编码和解码,并且您只是在询问如何使用 Delphi 执行 HTTP 发布。
【讨论】:
一个选项,使用我们的 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 文本。
【讨论】: