【问题标题】:How to read response from Indy IdHTTP get如何从 Indy IdHTTP get 读取响应
【发布时间】:2015-04-12 07:35:57
【问题描述】:

我已经编写了将 get 与 indy IdHTTP 组件一起使用的代码

var
get_url: string;
resp: TMemoryStream;
begin
  get_url := 'http://localhost/salesapp/is_run.php?ser=';
  resp := TMemoryStream.Create;

  IdHTTP1.Get(get_url+'v', resp);
  memo1.Lines.LoadFromStream(resp);

这个 url http://localhost/salesapp/is_run.php?ser=v 返回 JSON 响应,但我不知道如何从 Delphi 读取它。

【问题讨论】:

  • 这是一种已知格式还是您自己编造的?
  • 你的意思是 PHP 响应?我用fetchAll(PDO::FETCH_ASSOC)
  • 问题是您的 Delphi 客户端需要一个解析器,我怀疑是否有一个用于原始 PHP 结果集的解析器。您应该以某种已知格式与客户端交换数据,例如XML 或 JSON。
  • 如果我返回 JSON,我如何从 indy 组件中读取它?
  • 您不会使用 Indy 读取 JSON。您使用 Indy 检索get JSON,然后从 Delphi 代码中读取该 JSON。

标签: delphi indy


【解决方案1】:

Get() 退出时,流的Position 位于流的末尾。在调用LoadFromStream() 之前,您需要将Position 重置为0,否则它将无法加载任何内容:

var
  get_url: string;
  resp: TMemoryStream;
begin
  get_url := 'http://localhost/salesapp/is_run.php?ser=';
  resp := TMemoryStream.Create;
  try
    IdHTTP1.Get(get_url+'v', resp);
    resp.Position := 0; // <-- add this!!
    memo1.Lines.LoadFromStream(resp);
  finally
    resp.Free;
  end;
end;

替代方法是删除 TMemoryStream 并让 Get() 将 JSON 作为 String 返回:

memo1.Text := IdHTTP1.Get(get_url+'v');

【讨论】:

    猜你喜欢
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多