据我回忆,使用 Internet Explorer 对象是无法绕过其安全提示的。
我在工作中通过 serverhttp 对象使用 post/get 请求来解决这个问题,将文件作为 responsebody 获取,然后使用 ADODB 对象将正文直接保存到预定位置。
这是一个 GET 请求的示例,它应该直接从 URL 下载文件:
set objhttp = new MSXML2.ServerXMLHTTP60
URL = "http://www.princexml.com/samples/catalog/PrinceCatalogue.pdf"
objhttp.Open "GET", URL, False
objhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objhttp.send
If objhttp.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write objhttp.responseBody
oStream.SaveToFile "filepath and filename.pdf", 2
oStream.Close
End If
要使这项工作适用于 POST 请求,您需要更多信息。要尝试查找您需要使用 Internet Explorer 上的 F12 开发人员工具的信息:
- 在您下载的页面上打开 InternetExplorer
- 按 F12 打开开发者工具
- 点击“网络”
- 点击“播放”按钮(“启用网络流量捕获”)
- 现在下载文件,您应该会在网络摘要中看到请求该文件的 POST。
- 在 F12 工具中双击该 POST 行并单击“请求正文”,其中的任何内容都是金矿,即发送到 URL 以请求文件的东西。如果您可以解释它并将其部署到您的代码中,那么您已经破解了它。
最后要做的是更改上面代码中的两行:
objhttp.Open "POST", URL, False
objhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objhttp.send (This is where you put the data string i.e. the REQUEST BODY)
抱歉,我不能再指定了,POST 请求正文可以有很多格式,所以没有看到您系统的示例,我不能再进一步了。