2011-12-30 155 views
6

我试图用MS XMLHTTP COM检索HTTP文档的内容。我确实复制了下面的示例代码,但即使这样也不起作用,并且在发送方法调用时发生EOLEException错误“访问被拒绝”时失败并返回XMLHTTP和“访问被拒绝”错误

uses 
    MSXML, ComObj, ActiveX; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    httpDoc: XMLHTTP; // IXMLHTTPRequest 
begin 
    httpDoc := CreateOleObject('MSXML2.XMLHTTP') as XMLHTTP; 
    try 
    httpDoc.open('GET', 'http://www.google.com/index.html', False, EmptyParam, EmptyParam); 
    httpDoc.send(''); // <-- EOLEException 'Access is denied' 
    if (httpDoc.readyState = 4) and (httpDoc.status = 200) then 
     ShowMessage(httpDoc.responseText); 
    finally 
    httpDoc := nil; 
    end; 
end; 

我真的不知道我在做什么错:(

+0

同时检查'send'真的让空字符串参数而不是规范的'null' – OnTheFly 2011-12-30 07:55:01

回答

5

谷歌确实基于位置的重定向,有时是涉及重定向到另一个域。XMLHTTP不喜欢这一点。此外,它似乎XMLHTTP从本地脚本(如VB,德尔福等)在浏览器外运行时,不允许访问到远程服务器。见this discussionthis discussionthis documentation

+0

标记为答案。尽管我不得不责怪MSXML的开发人员,因为他们不提供处理x域重定向的情况,所以程序员不得不发明一些解决方法。更不用提晦涩/不具描述性的错误信息了。 – 2011-12-30 11:28:44

+0

如果您阅读我链接到的文章,他们说您可以使用“ServerXMLHTTP”对象(http://msdn.microsoft.com/en-us/library/windows/desktop/ms762278.aspx)来完成您的工作尝试。另请参阅'XDomainRequest'对象(http://msdn.microsoft.com/zh-cn/library/dd573303.aspx)。 – 2011-12-30 20:21:47