首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将生成的xml从internet导入到delphi应用程序中

将生成的xml从internet导入到delphi应用程序中
EN

Stack Overflow用户
提问于 2014-08-05 00:52:01
回答 3查看 2.6K关注 0票数 0

我是在德尔福XE6工作,需要下载xml数据,由服务器上的php脚本生成。我确实试过用Indy IdHTTP.Get,但它不能下载任何东西...当我尝试在浏览器或TWebBrowser中打开相同的链接时,它会显示生成的IdHTTP数据,但当我尝试使用xml直接拉取它时,没有任何东西被下载,就像没有生成的数据一样……

代码语言:javascript
运行
复制
Memo1.Lines.Add := idHTTP.Get(url);

提供空的memo1。

有没有什么技巧或例子可以让你在生成数据的服务器上先执行php脚本,然后把结果拉下来?

EN

回答 3

Stack Overflow用户

发布于 2014-08-05 01:50:23

您可以这样做:

代码语言:javascript
运行
复制
procedure TForm1.Button1Click(Sender: TObject);
var
   dow: TIdHTTP;
   xmlDoc: TXMLDocument;
   xmlStrem: TMemoryStream;
begin
   dow := nil;
   xmlDoc := nil;
   xmlStrem := nil;
   try
      try
         dow := TIdHTTP.Create(Self);
         dow.HandleRedirects := True;
         xmlStrem := TMemoryStream.Create();
         dow.Get('http://url.com/path/', xmlStrem);
         xmlDoc := TXMLDocument.Create(Self);
         xmlDoc.LoadFromStream(xmlStrem);
         ShowMessage(xmlDoc.XML.Text);
      except
         on E: Exception do
         begin
            raise;
         end;
      end;
   finally
      if Assigned(dow) then FreeAndNil(dow);
      if Assigned(xmlDoc) then FreeAndNil(xmlDoc);
      if Assigned(xmlStrem) then FreeAndNil(xmlStrem);
   end;
end;
票数 5
EN

Stack Overflow用户

发布于 2014-08-05 04:08:47

您调用的是返回UnicodeStringTIdHTTP.Get()版本,因此TIdHTTP将接收原始数据,并使用指定的字符集将其解码为UTF16。如果在确定字符集和/或解码数据时出现问题,则可能会返回一个空白字符串,而不会引发异常。

XML是一种二进制格式,取决于其字符集。因此,您确实应该下载二进制形式的XML,例如使用TMemoryStream,然后将其按原样传递给XML解析器进行处理。让它处理XML的字符集,而不是让Indy处理它。

票数 1
EN

Stack Overflow用户

发布于 2014-08-08 09:06:50

在尝试和寻找之后,我确实改变了

UserAgent而不是Mozilla/3.0到Mozilla/5.0

现在它起作用了。是的,xmlStream.Position := 0;

求救!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25123699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档