Delphi 从idhttp获取字符串

Delphi 从idhttp获取字符串,delphi,delphi-xe2,indy10,Delphi,Delphi Xe2,Indy10,目前我可以运行命令,但我不知道如何将结果转换成字符串 我做过一次这样的尝试 idhttp1.get('http://codeelf.com/games/the-grid-2/grid/',TStream(nil)); 一切似乎都正常运行,在wireshark中,我可以看到该命令的结果。现在如果我这样做了 HTML:=idhttp1.get('http://codeelf.com/games/the-grid-2/grid/'); 它将冻结应用程序,在wireshark中,我可以看到它发送GET

目前我可以运行命令,但我不知道如何将结果转换成字符串

我做过一次这样的尝试

idhttp1.get('http://codeelf.com/games/the-grid-2/grid/',TStream(nil));
一切似乎都正常运行,在wireshark中,我可以看到该命令的结果。现在如果我这样做了

HTML:=idhttp1.get('http://codeelf.com/games/the-grid-2/grid/');

它将冻结应用程序,在wireshark中,我可以看到它发送GET并得到响应,但不知道为什么会冻结。HTML只是一个字符串变量

编辑完整代码

按钮点击
login(EUserName.Text,EPassWord.Text)

回应 我得到的回复是
传输编码:chunked\r\n
内容类型:text/html\r\n
不知道这是否重要。
谢谢,Indy支持某些类型的流式HTTP响应(请参阅),但这只有在服务器使用多部分/*响应时才有帮助。链接的博客文章进一步解释了细节,还展示了Indy HTTP组件如何为MIME解码器提供连续的响应流

如果这不适用于您的情况,解决方法是转到“原始”TCP层,这意味着使用TIdTCPClient组件发送HTTP请求,然后从IOHandler逐行(或逐字节)读取响应。这样就可以完全控制响应处理。请求和响应应该在线程中处理,以将其与主线程解耦

TIdHTTP.Post()
返回响应数据,您不应该调用
TIdHTTP.Get()
单独检索它:

procedure TForm5.Login(name: string; Pass: string);
var
  Params: TStringList;
  html : string;
begin
  Params := TStringList.Create;
  try
    Params.Add('user='+name);
    Params.Add('pass='+pass);
    Params.Add('sublogin=Login');

    //post password/username
    HTML := IdHTTP1.Post('http://codeelf.com/games/the-grid-2/grid/', Params);
  finally
    Params.Free;
  end;
  llogin.Caption := 'Logged In';
end;

你为什么要谈备忘录?你知道怎么用备忘录吗?还是GET的问题?把注意力集中在一个问题上,使问题变得容易。我怀疑这是我的错。你真的找不到这方面的示例代码吗?这就好像你根本没有做任何研究。问题中的代码很好,分配给HTML的那一行。你的问题在于我们看不到的代码。可能你有没有试着制作一个非常简单的程序,只调用Get?@DavidHeffernan这就是我从冻结到不冻结的所有代码,我甚至不在其他地方使用HTML。我会发布所有代码,大约10行。给我一点时间更新it@DavidHeffernan现在你明白我为什么把它贴在这里了吗?我不明白它为什么会结冰。没有一个例子可以告诉我这一点?分块的Http响应会导致Get阻塞。持久连接不断地从服务器接收数据。从我在wireshark上观看时看到的情况来看,一旦我记录下来,它发送了一个没有多少数据的回复。我记不清到底是什么,但好像是你登录的……也许是饼干什么的。。但我必须运行一个重新加载的程序?我想。。打开页面,并获取HTML的响应。。我会试试这个,但我认为它只会给我第一个回复的文本,这似乎没有什么。在获得另一个URL之前,登录到一个URL并不罕见。不过,发布后再访问同一个URL并不常见。HTTP重定向通常用于处理该问题,而
TIdHTTP
可以为您处理重定向。如果看不到真正的线鲨捕获,很难说到底发生了什么。
procedure TForm5.Login(name: string; Pass: string);
var
  Params: TStringList;
  html : string;
begin
  Params := TStringList.Create;
  try
    Params.Add('user='+name);
    Params.Add('pass='+pass);
    Params.Add('sublogin=Login');

    //post password/username
    HTML := IdHTTP1.Post('http://codeelf.com/games/the-grid-2/grid/', Params);
  finally
    Params.Free;
  end;
  llogin.Caption := 'Logged In';
end;