我需要知道如何从需要身份验证的服务器加载远程xml文件。 使用下面的代码:
procedure TForm1.Button1CLICK(Sender: object);
Var xmld : TXMLDocument;
begin
xmld.LoadFromFile('http://mysite');
xmld.active := true;
end;
我不知道在哪里放置用户凭据。执行时,出现错误“访问被拒绝”。 请有人帮忙吗。 提前致谢
答案 0 :(得分:6)
这实际上是一个由两部分组成的问题:
如何从a下载文档 互联网上的服务器需要 认证
如何将XML文档加载到 动态创建XmlDocument对象?
您可以使用IdHttp组件(已在Indy软件包中提供并与Delphi一起安装)从服务器检索XML文档。为此,您可以调用其Get方法,将XML文档地址作为参数传递。您可以将结果检索为字符串或流。
如果服务器正在使用身份验证,那么您应该首先检测它正在使用哪种身份验证方法;如果它使用HTTP身份验证,IdHttp已允许您通过提供Request属性来定义HTTP请求参数。您可以使用此属性设置Username \ Password和其他参数。如果它使用基于cookie的身份验证,您可以将cookie管理器对象连接到IdHttp,并向服务器提供所需的cookie。服务器可能使用Web表单进行身份验证,并将cookie返回给您,或返回会话ID。因此,了解服务器使用的身份验证方法非常重要。
如果您不知道服务器使用的身份验证方法,您可以询问他们的支持团队,或者您可以安装类似Wireshark的嗅探器,并尝试使用您的Web浏览器连接到服务器,并捕获之间交换的数据服务器和浏览器,并分析它以找出使用的方法。
无论如何,一旦收到XML数据,就可以使用其LoadFromStream方法或其XML属性将其加载到TXmlDocument实例中。
答案 1 :(得分:3)
我几天前对此进行了编码。我正在实现一个自动更新程序。这是代码的一大块:
procedure TUpdateForm.GetPage(URL: string);
var ms: TMemoryStream;
IdHTTP: TIdHTTP;
begin
SRC.Free;
SRC:=TStringList.Create;
IdHTTP:=TIdHTTP.Create();
IdHTTP.HandleRedirects:=True;
IdHTTP.Request.Username:='USERNAME';
IdHTTP.Request.Password:='PASSWORD';
ms:=TMemoryStream.Create;
IdHTTP.Get(URL,ms);
ms.Position:=0;
TEncoding.UTF8.ToString;
Src.LoadFromStream(ms,TENCODING.UTF8);
Src.Free;
ms.Free;
IdHTTP.Free;
end;
procedure TUpdateForm.GetXML;
var TempNode: IXMLNode;
TempVersion: TVersion;
i,j:integer;
begin
GetPage('http://www.w3sayit.wz.cz/updateinfo.xml');
MainForm.XMLDocument.LoadFromXML(SRC.Text);
MainForm.XMLDocument.Active:=true;
...
第一个过程将URL上的文档加载到全局TStringList(SRC)。 第二个解析XML(我剪掉其余部分)。
编辑:抱歉,我刚看到你想要一个身份验证。将很快更新。 完成。
答案 2 :(得分:0)
TXMLDocument.LoadFromFile适用于简单情况。在您的情况下,您需要首先使用propper凭证download(使用http)xml文件,然后使用TXMLDocument.LoadFromStream或TXMLDocument.XML将xml加载到解析器中。
答案 3 :(得分:0)