使用Indy'从响应流获取XML;s IDTCPClient
这个问题与以下方面直接相关: 我只需要一个版本的get函数来检索XML使用Indy'从响应流获取XML;s IDTCPClient,xml,delphi,indy,delphi-xe5,Xml,Delphi,Indy,Delphi Xe5,这个问题与以下方面直接相关: 我只需要一个版本的get函数来检索XML function TMyConnector.GETXML(aRawHeader: String): String; 使用idHTTP组件,我可以执行以下操作 HTTP.Request.ContentType := 'text/xml'; 我要查找的文件头如下所示: <?xml version="1.0" encoding="utf-8" ?> 如何使用IDTCPClient组件实现这一点 TIdHTT
function TMyConnector.GETXML(aRawHeader: String): String;
使用idHTTP组件,我可以执行以下操作
HTTP.Request.ContentType := 'text/xml';
我要查找的文件头如下所示:
<?xml version="1.0" encoding="utf-8" ?>
如何使用IDTCPClient组件实现这一点 TIdHTTP.Request.ContentType不会要求服务器发送XML vs HTML。它告诉服务器您正在向服务器发送XML/HTML。非常不同的事情 要让服务器向您发送XML/HTML,这实际上取决于服务器,而不是客户机。根据服务器的要求,您有几种选择:
Accept
头,该头指定您愿意为给定URL接收的特定格式。服务器必须能够以多种格式表示请求的数据您对HTTP和
TIdHTTP
的实际工作方式有一个基本的误解。我强烈建议您使用Wireshark和Fiddler来研究真正的web浏览器如何发送HTTP请求,然后学习如何在代码中复制这些请求。同时研究RFC2616。正确地手动实现HTTP并不是一件小事,因此拒绝使用预先制作的HTTP库,就等于打开了一个更大的蠕虫罐,而你可能已经准备好了。hmmmm,事实证明这比想象的要容易。我只是简单地看了一下GenerateJSON方法,然后说,好的,我如何将此方法用于XML
然后我用谷歌搜索MempryStream到String,找到了这个函数
function StreamToString(aStream: TStream): string;
var
SS: TStringStream;
begin
if aStream <> nil then
begin
SS := TStringStream.Create('');
try
SS.CopyFrom(aStream, 0); // No need to position at 0 nor provide size
Result := SS.DataString;
finally
SS.Free;
end;
end else
begin
Result := '';
end;
end;
Procedure TLtLiveConnector.GenerateXML;
begin
if ResponseStream <> nil then
Begin
ResponseXML_V := StreamToString(ResponseStream);
End;
end;
函数StreamToString(aStream:TStream):字符串;
变量
SS:TStringStream;
开始
如果为零,则
开始
SS:=TStringStream.Create(“”);
尝试
SS.CopyFrom(aStream,0);//不需要定位在0,也不需要提供大小
结果:=SS.DataString;
最后
SS.免费;
结束;
结束其他
开始
结果:='';
结束;
结束;
程序TLtLiveConnector.GenerateXML;
开始
如果响应为零,则
开始
ResponseXML_V:=StreamToString(ResponseStream);
结束;
结束;
@LIVESTUFF:Fiddler是一个代理服务器。它可以自动重定向基于WinInet的应用程序(如Internet Explorer)以连接到自身,但其他应用程序(如您的应用程序)需要手动配置以连接到代理TIdHTTP
具有用于该目的的ProxyParams
属性。