Xmlhttprequest 引发访问被拒绝错误

Posted

技术标签:

【中文标题】Xmlhttprequest 引发访问被拒绝错误【英文标题】:Xmlhttp request is raising an Access Denied error 【发布时间】:2014-05-21 05:13:17 【问题描述】:

以下 Excel 宏正在向该网页发出 xmlhttp 请求以在第二阶段检索一些值,直到前一段时间在 VBA 中正常工作:

Sub WebReq()

Link = "http://it.finance.yahoo.com/q?s=^FCHI&ql=10" & str(rnd())
Set htm = CreateObject("htmlFile")

Set RequestWeb = CreateObject("msxml2.xmlhttp")
With RequestWeb
    .Open "GET", "" & Link & "", False
    .send
    htm.body.innerhtml = .responsetext
End With

End Sub

现在,在调用方法时:

    .send

对象 msxml2.xmlhttp 引发以下错误:

Run-time error '-2147024891 (80070005)'
Access is denied. 

我一直在网上寻找,但从未回答所有类似的主题。谁能解释一下这个错误是什么意思,如果有什么办法可以解决它,甚至只是解决它?

注意:变量'Link'末尾的随机字符串已被添加以强制页面重新加载,因为脚本正在检索实时值,因此每次都应该加载它.

其他信息:在寻找解决方案时,我现在注意到,即使我结束运行并再次重新启动,链接的随机部分也会产生相同的值:

Link = http://it.finance.yahoo.com/q?s=^FCHI&ql=10 .7055475

为什么会这样? rnd() 不应该在每次调用时产生一个介于 0 和 1 之间的新随机值吗?

【问题讨论】:

【参考方案1】:

更新

Sub WebReq()

link = "http://it.finance.yahoo.com/q?s=^FCHI&ql=10" & Str(Rnd())
Set htm = CreateObject("htmlFile")
Dim objHttp

    Set objHttp = CreateObject("Msxml2.ServerXMLHTTP")
    objHttp.Open "GET", link, False

    objHttp.Send
    htm.body.innerhtml = objHttp.responsetext
    Set objHttp = Nothing
End Sub

【讨论】:

您好 Rich,感谢您的回答。不幸的是,在调试时3.0 对象不会引发access denied 错误,但它会返回一个空的responseText。相反,在运行时它会失败并显示 The data is not available yet :/ @MatteoNNZ 我的matteo不好,试试上面的代码,这次我返回了HTML,成功了。 也许有些东西对我不利,但现在我得到了Run-time error '-2147012889 (80072ee7): The server name or address could not be resolved。我一直在网上找了一下,似乎与浏览器代理有关。我承认我不是网络服务专家,你知道为什么这个对象会引发这个问题吗? 好吧,如果您的公司浏览器代理包中内置了通过 vbscript 访问 html 的限制,那肯定会导致它。这可能吗? 我不这么认为,我在某些时候也有同样的想法,但是一些朋友根据我的要求尝试了代码并且得到了同样的错误,所以我认为这与网络无关.【参考方案2】:

我发现,就我而言,将 http 更改为 https 解决了访问被拒绝的问题。我只能假设该网站以某种方式进行了更改并且没有告诉任何人

【讨论】:

如此简单的解决方案!同样的事情发生在我身上! 在浪费时间更改标题之后,结果发现这也是我的解决方案。【参考方案3】:

使用

CreateObject("MSXML2.ServerXMLHTTP.6.0") 

从本地计算机发出的标准请求禁止访问不受 IE 信任的站点。 MSXML2.ServerXMLHTTP.6.0服务器端 对象,它不执行这些检查。

【讨论】:

【参考方案4】:

在我的情况下,用户对我们公司网络上的代理服务器没有 AD 权限。 (设置用户时的简单疏忽。)添加缺少的安全组为用户解决了问题。

【讨论】:

【参考方案5】:

访问被拒绝是 IE 问题

internet options > security tab > custom security level > Miscellaneous >Access data sources across domains > enable

【讨论】:

有趣。这是我在 IE6 中的问题;即使帖子将发送到页面域的子域,IE6 默认情况下也不会允许该子域。最终,我不得不在同一个域上使用与 80 不同的端口号,而不是使用子域(以及防火墙中的端口转发器,这样我就可以在内部获取实际位于不同服务器上的资源)。 这对我有用【参考方案6】:

我可以通过将传递的链接从“http://”更改为“https://”来修复它

我拉取的网站已升级,尝试使用不安全的链接拉取数据失败。现在效果很好(无需更改代码。

【讨论】:

【参考方案7】:

这对我有用:

With CreateObject("MSXML2.ServerXMLHTTP.6.0")
  .Open "GET", URL, False
  .Send
  content = .ResponseText
End With

【讨论】:

【参考方案8】:

恐怕我不明白为什么会出现这个问题,但我猜这是安全的“https://”与不安全的“http://”。在遵循 VBA 课程中的示例代码时,我遇到了相同的“拒绝访问”消息。原来的代码是:

XMLPage.Open "GET", "http://x-rates.com/table/?from=GBP&amount=3", False    
XMLPage.send

我将“http://”更改为“https://”,错误消失了。

【讨论】:

【参考方案9】:

在您的自定义链接中的“https://”之后添加“www”, 像这样:

XMLPage.Open "GET", "https://www.x-rates.com/table/?from=GBP&amount=3", False    
XMLPage.send

【讨论】:

以上是关于Xmlhttprequest 引发访问被拒绝错误的主要内容,如果未能解决你的问题,请参考以下文章

跨域调用错误:XMLHttpRequest:网络错误 0x80070005,访问被拒绝

浏览器 11 | Angular 4 - CORS 请求失败(XMLHttpRequest:网络错误 0x80070005,访问被拒绝。)

[XMLHttpRequest访问被拒绝,但试图从Web服务器位置访问文件-IE8

SCRIPT5:在 IE9 中对 xmlhttprequest 的访问被拒绝

SCRIPT7002:XMLHttpRequest:网络错误 0x80070005,成功预检请求后拒绝访问

XMLHttpRequest:网络错误 0x80070005,在 Microsoft Edge(但不是 IE)上拒绝访问