加载远程xml文件

时间:2011-05-22 10:56:07

标签: xml delphi

我需要知道如何从需要身份验证的服务器加载远程xml文件。 使用下面的代码:

procedure TForm1.Button1CLICK(Sender: object); 
Var xmld : TXMLDocument;
begin
   xmld.LoadFromFile('http://mysite');
   xmld.active := true;
end;

我不知道在哪里放置用户凭据。执行时,出现错误“访问被拒绝”。 请有人帮忙吗。 提前致谢

4 个答案:

答案 0 :(得分:6)

这实际上是一个由两部分组成的问题:

  1. 如何从a下载文档 互联网上的服务器需要 认证

  2. 如何将XML文档加载到     动态创建XmlDocument对象?

  3. 您可以使用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)

不确定这是否有效,但您可以尝试:

http://user:password@yoursite.com/file

这适用于我使用HTTP身份验证的情况。