我在Delphi XE6中工作,需要下载php脚本在服务器上生成的xml数据。我确实试过Indy IdHTTP.Get但它没有下载任何东西......当我尝试在浏览器或TWebBrowser中打开相同的链接时它显示生成的xml数据,但是当我尝试直接用IdHTTP获取它时,没什么下载,就像没有生成数据...
Memo1.Lines.Add := idHTTP.Get(url);
提供空的memo1。
如何在某些服务器上首先执行php脚本以生成数据并提取结果的任何提示或示例?
答案 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寻求帮助!