关于 vba:Xmlhttp 请求引发访问被拒绝错误

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

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


使用

1
CreateObject("MSXML2.ServerXMLHTTP.6.0")

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


我发现,就我而言,将 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://" 并且错误消失了。