Xmlhttp request is raising an Access Denied error
以下 Excel 宏正在向该网页发出 xmlhttp 请求以在第二阶段检索一些值,直到前一段时间在 VBA 中正常工作:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 |
现在,在调用方法时:
1 | .send |
对象 msxml2.xmlhttp 引发以下错误:
1 2 | Run-time error '-2147024891 (80070005)' Access is denied. |
我一直在网上寻找,但所有类似的帖子都没有得到答复。谁能解释一下这个错误是什么意思,如果有什么办法可以解决它,甚至只是解决它?
注意:变量\\'Link\\'末尾的随机字符串已被添加以强制页面重新加载,因为脚本正在检索实时值,因此每次都应该加载它。
附加信息:在寻找解决方案时,我注意到链接的随机部分总是产生相同的值,即使我结束运行并再次重新启动:
1 | Link = http://it.finance.yahoo.com/q?s=^FCHI&ql=10 .7055475 |
为什么会这样?
使用
1 | CreateObject("MSXML2.ServerXMLHTTP.6.0") |
从本地计算机发出的标准请求禁止访问不受 IE 信任的站点。
我发现,就我而言,将 http 更改为 https 可以解决访问被拒绝的问题。我只能假设该网站以某种方式进行了更改并且没有告诉任何人
访问被拒绝是 IE 问题
1 | internet options > security tab > custom security level > Miscellaneous >Access data sources across domains > enable |
更新
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 |
这对我有用:
1 2 3 4 5 | With CreateObject("MSXML2.ServerXMLHTTP.6.0") .Open"GET", URL, False .Send content = .ResponseText End With |
在您的自定义链接中的 "https://" 之后添加 "www",
像这样:
1 2 | XMLPage.Open"GET","https://www.x-rates.com/table/?from=GBP&amount=3", False XMLPage.send |
我可以通过将传递的链接从 "http://" 更改为 "https://"
来修复它
我拉取的网站已升级,尝试使用不安全链接拉取数据失败。现在效果很好(无需更改代码。
在我的情况下,用户对我们公司网络上的代理服务器没有 AD 权限。 (设置用户时的简单疏忽。)添加缺少的安全组为用户解决了问题。
恐怕我不明白为什么会出现这个问题,但我猜这是安全的 "https://" 与不安全的 "http://"。在遵循 VBA 课程中的示例代码时,我遇到了相同的"拒绝访问"消息。原来的代码是:
1 2 | XMLPage.Open"GET","http://x-rates.com/table/?from=GBP&amount=3", False XMLPage.send |
我将 "http://" 更改为 "https://" 并且错误消失了。