这个问题与以下内容有直接关系:
我只需要一个get函数版本来检索XML
function TMyConnector.GETXML(aRawHeader: String): String;
使用idHTTP组件,我可以执行以下操作
HTTP.Request.ContentType := 'text/xml';
我所追求的文件的标题如下所示:
<?xml version="1.0" encoding="utf-8" ?>
如何使用IDTCPClient组件执行此操作?
答案 0 :(得分:6)
TIdHTTP.Request.ContentType
不会要求服务器发送XML与HTML。它告诉服务器您正在向服务器发送XML / HTML 。非常不同。
要求服务器向您发送XML / HTML,这实际上取决于服务器,而不是客户端。您有几个选择,具体取决于服务器的要求:
请求仅发送XML的特定URL。请求仅发送HTML的特定URL。等
请求一个URL,该URL调用服务器端脚本,该脚本允许您传入输入参数,通常(但不总是)在URL中,以指定所需的输出格式。
在请求中包含Accept
标头,用于指定您愿意为给定网址接收的特定格式。服务器必须能够以多种格式表示所请求的数据。
您对HTTP和TIdHTTP
的实际工作方式存在根本性的误解。我强烈建议您使用Wireshark和Fiddler来研究真实的Web浏览器如何发送HTTP请求,然后学习如何在代码中复制它。还要研究RFC 2616.手动实现HTTP并不容易,因此通过拒绝使用预先制作的HTTP库,您可以打开更大的蠕虫病毒,然后您可能已经做好了准备。
答案 1 :(得分:0)
然后我用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;