[英]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\\n
和Content-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.