XMLHTTP和“访问被拒绝”错误

6
我正在尝试使用MS XMLHTTP COM获取HTTP文档的内容。虽然我已经复制了以下示例代码,但即使如此,它也无法正常工作,并在send方法调用时失败并出现“EOLEException错误”'Access is denied'。
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;

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


另外,还要检查 send 是否真的允许空字符串参数而不是规范的 null - OnTheFly
1个回答

5

谷歌使用基于位置的重定向,有时会将其重定向到另一个域。这会导致XMLHTTP无法正常工作。此外,当从本地脚本(如VB、Delphi等)在浏览器外运行时,XMLHTTP似乎不允许访问远程服务器。请参阅此讨论此讨论此文档


标记为答案。虽然我不得不责怪MSXML的开发人员,因为他们没有提供处理跨域重定向情况的方法,所以程序员被迫发明一些解决方法。更不用说晦涩难懂/不具描述性的错误消息了。 - David Unric
如果您阅读我提供的文章,它们会告诉您可以使用 ServerXMLHTTP 对象 (http://msdn.microsoft.com/en-us/library/windows/desktop/ms762278.aspx) 来实现您正在尝试的内容。同时也可以查看 XDomainRequest 对象 (http://msdn.microsoft.com/en-us/library/dd573303.aspx)。 - Remy Lebeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接