繁体   English   中英

从idhttp获取字符串get

[英]Get string from a idhttp 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);

    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
     IdHTTP1.Post('http://codeelf.com/games/the-grid-2/grid/', Params);
    //get the grid source
     HTML := idhttp1.Get('http://codeelf.com/games/the-grid-2/grid/');

  finally
    Params.Free;
  end;
llogin.Caption := 'Logged In';
end;

响应我得到的响应是: Transfer-Encoding: chunked\\r\\nContent-Type: text/html\\r\\n不知道这是否重要。 谢谢

Indy支持某些类型的流HTTP响应(请参阅New TIdHTTP hoNoReadMultipartMIME标志 ),但这仅在服务器使用multipart / *响应时才有用。 链接的博客文章进一步解释了详细信息,还显示了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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM