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)上拒绝访问