为了读取RSS的XML内容。我采用了如下三种方法,都有问题:
1、用WinINet API的方式获取,这种方式获取的内容最正确,但却不知道怎么透过Proxy(IE已经保存了Proxy的用户名和密码),即便能透过Proxy也不想用户输入用户名和密码,因为IE中已经设置过了。
function GetWebPage(const AURL : String):String;
var
Session, HTTPFile : HINTERNET;
FileSize, BytesRead : DWORD;
Content : PChar;
i: Integer;
ReadOver : Boolean;
begin
Result := '';
Session := InternetOpen(NIL, 0, NIL, NIL, 0);
if Session = NIL then
begin
Result := GetInternetLastErrorInfo;
exit;
end;
HttpFile := InternetOpenUrl(Session, PChar(AURL), NIL, 0, 0, 0 );
if HttpFile =NIL then
begin
Result := GetInternetLastErrorInfo;
exit;
end;
FileSize := 1024*1024*10;
GetMem(Content, FileSize);
if Content = NIL then
begin
raise Exception.Create('内存不足!');
exit;
end;
try
for i := 0 to 1000 do
begin
ReadOver := InternetReadFile(HTTPFile, Content, FileSize, BytesRead );
Content[BytesRead] := #0;
Result := Result + StrPas(Content);
if ReadOver and (BytesRead = 0) then break;
end;
finally
InternetCloseHandle(HTTPFile);
InternetCloseHandle(Session);
FreeMem(Content);
end;
end;
2、用TWebBrowser的Document强制转化为IHTMLDocument2的方式获取outHtml,outText均不是正确格式的XML,这种方法可以利用IE自动透过Proxy
3、最后采用TWebBrowser的OleObject.XMLDocument的方式是最接近答案的,可以穿过Proxy,同时可以获得XML文档,但是遇到一个网站XML格式不太正确的(中间多了很多空行的,IE不能解释),发现回来的内容被截取了,只剩下部分了,与IE右键查看源码看到的内容完全不一样,如果哪位能帮助解决这个问题,给分100.
v := WB.OleObject.Document.XMLDocument;
AIntf := IUnknown(v) as IXMLDOMDocument; if AIntf.xml +'A' = 'A' then exit; FXML := NIL;
FXML := LoadXMLData(AIntf.xml);其实我的问题就是如何用TWebBrowser获得与在IE上点击右键查看代码完全一致的文本。
1、用WinINet API的方式获取,这种方式获取的内容最正确,但却不知道怎么透过Proxy(IE已经保存了Proxy的用户名和密码),即便能透过Proxy也不想用户输入用户名和密码,因为IE中已经设置过了。
function GetWebPage(const AURL : String):String;
var
Session, HTTPFile : HINTERNET;
FileSize, BytesRead : DWORD;
Content : PChar;
i: Integer;
ReadOver : Boolean;
begin
Result := '';
Session := InternetOpen(NIL, 0, NIL, NIL, 0);
if Session = NIL then
begin
Result := GetInternetLastErrorInfo;
exit;
end;
HttpFile := InternetOpenUrl(Session, PChar(AURL), NIL, 0, 0, 0 );
if HttpFile =NIL then
begin
Result := GetInternetLastErrorInfo;
exit;
end;
FileSize := 1024*1024*10;
GetMem(Content, FileSize);
if Content = NIL then
begin
raise Exception.Create('内存不足!');
exit;
end;
try
for i := 0 to 1000 do
begin
ReadOver := InternetReadFile(HTTPFile, Content, FileSize, BytesRead );
Content[BytesRead] := #0;
Result := Result + StrPas(Content);
if ReadOver and (BytesRead = 0) then break;
end;
finally
InternetCloseHandle(HTTPFile);
InternetCloseHandle(Session);
FreeMem(Content);
end;
end;
2、用TWebBrowser的Document强制转化为IHTMLDocument2的方式获取outHtml,outText均不是正确格式的XML,这种方法可以利用IE自动透过Proxy
3、最后采用TWebBrowser的OleObject.XMLDocument的方式是最接近答案的,可以穿过Proxy,同时可以获得XML文档,但是遇到一个网站XML格式不太正确的(中间多了很多空行的,IE不能解释),发现回来的内容被截取了,只剩下部分了,与IE右键查看源码看到的内容完全不一样,如果哪位能帮助解决这个问题,给分100.
v := WB.OleObject.Document.XMLDocument;
AIntf := IUnknown(v) as IXMLDOMDocument; if AIntf.xml +'A' = 'A' then exit; FXML := NIL;
FXML := LoadXMLData(AIntf.xml);其实我的问题就是如何用TWebBrowser获得与在IE上点击右键查看代码完全一致的文本。
Uses UrlMon, OleCtrls;
UrlDownloadToFile( NIL, PChar(SourceURL), PChar(DestFileName), 0 , NIL);