从Internet生成xml到delphi应用程序

时间:2014-08-04 16:52:01

标签: xml delphi indy delphi-xe6

我在Delphi XE6中工作,需要下载php脚本在服务器上生成的xml数据。我确实试过Indy IdHTTP.Get但它没有下载任何东西......当我尝试在浏览器或TWebBrowser中打开相同的链接时它显示生成的xml数据,但是当我尝试直接用IdHTTP获取它时,没什么下载,就像没有生成数据...

Memo1.Lines.Add := idHTTP.Get(url);

提供空的memo1。

如何在某些服务器上首先执行php脚本以生成数据并提取结果的任何提示或示例?

3 个答案:

答案 0 :(得分:5)

你可以这样做:

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;

答案 1 :(得分:1)

您正在调用返回TIdHTTP.Get()的{​​{1}}版本,因此UnicodeString将接收原始XML数据并使用指定的XML将其解码为UTF-16字符集。如果确定charset和/或解码数据时出现问题,则可能会返回空字符串而不会引发异常。

XML是一种二进制格式,受其字符集的限制。所以你真的应该将XML作为二进制文件下载,例如使用TIdHTTP,然后将其原样传递给XML解析器进行处理。让它处理XML的charset,不要让Indy处理它。

答案 2 :(得分:0)

经过尝试和搜索,我确实改变了

UserAgent 而不是 Mozilla / 3.0 进入 Mozilla / 5.0

现在可以使用了。是的, xmlStream.Position := 0;

Thnx寻求帮助!