加载远程xml文件
我需要知道如何从需要身份验证的服务器加载远程 xml 文件。 使用下面的代码:
procedure TForm1.Button1CLICK(Sender: object);
Var xmld : TXMLDocument;
begin
xmld.LoadFromFile('http://mysite');
xmld.active := true;
end;
我不知道在哪里放置用户凭据。当我执行时,出现错误“访问被拒绝”。 有人可以帮忙吗? 提前致谢
I need to know how to load remote xml file from a server that needs authentication.
Using the code bellow :
procedure TForm1.Button1CLICK(Sender: object);
Var xmld : TXMLDocument;
begin
xmld.LoadFromFile('http://mysite');
xmld.active := true;
end;
I dont know where to put user credentials. When I execute, error "access denied" occures.
Can anybody help please.
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
嗯,这实际上是一个由两部分组成的问题:
如何从
互联网上的服务器需要
身份验证?
如何将 XML 文档加载到
动态 XmlDocument 对象?
您可以使用 IdHttp 组件(该组件已在 Indy 包中提供并随 Delphi 一起安装)从服务器检索 XML 文档。为此,您可以调用其 Get 方法,并将 XML 文档地址作为参数传递。您可以以字符串或流的形式检索结果。
如果服务器正在使用身份验证,那么您应该首先检测它使用的是哪种身份验证方法;如果使用 HTTP 身份验证,IdHttp 已经允许您通过提供 Request 属性来定义 HTTP 请求参数。您可以使用此属性设置用户名\密码和其他参数。如果使用基于 cookie 的身份验证,您可以将 cookie 管理器对象连接到 IdHttp 并向服务器提供所需的 cookie。服务器可能会使用 Web 表单进行身份验证并将 cookie 返回给您,或者返回会话 ID。因此,了解服务器使用的身份验证方法非常重要。
如果您不知道服务器使用的身份验证方法,您可以询问他们的支持团队,或者您可以安装像 Wireshark 这样的嗅探器,并尝试使用 Web 浏览器连接到服务器,并捕获服务器和服务器之间交换的数据。你的浏览器,并分析它以找出使用了什么方法。
无论如何,一旦收到 XML 数据,您就可以使用其 LoadFromStream 方法或其 XML 属性将其加载到 TXmlDocument 实例中。
Well this is actually a two-part question:
How to download a document from a
server on internet which requires
authentication?
How to load an XML document into
XmlDocument object dynamically?
You can use IdHttp component, which is already available in Indy package and installed with your Delphi, to retrieve the XML document from the server. To do this, you can call its Get method, passing XML document address as a parameter. You can retrieve the result as a string or a stream.
If the server is using authentication, then you should first detect what kind of authentication methods it is using; if it is using HTTP authentication, IdHttp already allows you to define HTTP request parameters by providing a Request property. You can set Username\Password and other parameters using this property. If it using a cookie-based authentication, you can connect a cookie manager object to IdHttp and provide the required cookie to the server. The server might use a web form for authentication and return the cookie back to you, or return a session id. So it is important you know what authentication method the server is using.
If you have no idea about the authentication method used by server, you can ask their support team, or you can install a sniffer like Wireshark, and try to connect to the server using you web browser, and capture the data exchanged between the server and your browser, and analyze it to find out what method is used.
Anyways, once you have received the XML data, you can load it into a TXmlDocument instance using its LoadFromStream method, or its XML property.
我几天前就这样编码了。我正在实施一个自动更新程序。下面是一段代码:
第一个过程将 URL 处的文档加载到全局 TStringList (SRC)。
第二个解析 XML(我剪掉了其余部分)。
编辑:抱歉,我刚刚读到您想要一个身份验证。很快就会更新。 完成。
I coded this like a few days ago. I was implementing an auto-updater. Here is a chunk of the code:
The first procedure loads an document at URL to a global TStringList (SRC).
The second one parses the XML (i cut the rest of it).
EDIT: sorry, I just read you want an auth. Will update soon. Done.
TXMLDocument.LoadFromFile 适用于简单情况。在您的情况下,您需要先下载(使用http)具有正确凭据的xml文件然后使用 TXMLDocument.LoadFromStream 或 TXMLDocument.XML 将 xml 加载到解析器中。
TXMLDocument.LoadFromFile is for simple situations. In your case you need to download (using http) the xml file with the propper credentials first and then use TXMLDocument.LoadFromStream or TXMLDocument.XML to load the xml into the parser.
不确定这是否有效,但您可以尝试:
http://user:[email protected]/file
这在我的情况下适用于 HTTP 身份验证。
Not sure if that will work but you can try:
http://user:[email protected]/file
This works in my case with HTTP auth.