如何从Indy IdHTTP获取响应

3

我已经编写了使用indy IdHTTP组件的get请求代码

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中读取它。

问题在于你需要在Delphi客户端上使用解析器,而我怀疑原始PHP结果集中是否有这样的解析器。你应该使用一些已知格式(例如XML或JSON)与客户端交换数据。 - TLama
如果我返回JSON,我该如何从Indy组件中读取它? - zac
你可以像TLama所说的那样,通过JSON解析器运行它。 - Jerry Dodge
我想使用Indy读取JSON,但我还没有找到任何相关资料。 - zac
3
使用Indy时,你不能“读取”JSON。你需要使用Indy来“获取”或“检索”JSON,然后从你的Delphi代码中“读取”那个JSON。注意不要改变原意,尽量保持通俗易懂。 - Ken White
显示剩余4条评论
1个回答

15

调用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字符串:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接