当前位置: 首页 > 知识库问答 >
问题:

使用VBA从具有SAML认证的网站下载文件

华聪
2023-03-14

我想构建一个 excel vba 插件,该插件能够从当前受 SAML 身份验证保护的内联网网站下载 excel 文件。

如果我尝试使用Internet Explorer或GoogleChrome下载文件,文件会自动开始下载,而无需放置任何凭据,我认为这是因为浏览器依赖于某种集成的Windows身份验证。

如果我尝试使用VBA对象(如winhttp.winhttprequest.5.1)下载,我会得到一些html页面,我认为它正在启动SAML身份验证(因此我假设我使用的winhttp.winhttprequest.5.1对象不支持SAML身份验证)。

是否有任何简单的方法可以使用VBA进行SAML身份验证,或者我必须手动编码身份验证步骤?

共有1个答案

王声
2023-03-14

问题是,虽然随Windows/Office分发的各种库将为您提供HTTP和SSL,但要找到一个支持SAML的库并不容易。NET有Windows Communication Foundation(WCF),可以在VBA中使用,但我不知道它如何与网站一起工作。

如果你不能让WCF为你做SAML,最简单的方法可能是使Internet Explorer自动化,因为Internet Explorer已经包含了SAML功能。不幸的是,在Internet Explorer中有一件事是很难自动化的,那就是下载文件,尤其是如果你不想在用户的屏幕上弹出一些东西的话。

您需要使用Windows API以编程方式与Internet Explorer的“另存为”对话框进行交互,同时保持它的隐藏状态。下面的文章描述了如何做到这一点:http://www . code project . com/Articles/2847/Automated-IE-save as-MHTML本文使用C,但您可以从VBA进行相同的API调用。

我想这是一个确定服务器使用哪种SAML的问题,并决定什么更容易:(a)自动化Internet Explorer或(b)编写自己的SAML客户端。

如果要编写自己的SAML客户机,可以使用MSXML消费和生成所需的XML,并对base64进行编码/解码。

 类似资料:
  • 我需要下载一个文件,每天从网站上的日期将过去。我尝试使用以下代码- 但这是一个错误- Invoke-WebRequest:基础连接已关闭:发送时发生意外错误。在行:3字符:1调用-网络请求-Uri$url-OutFile$输出 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 分类信息:无效操作:(System.网。[Invoke-WebRequest],

  • 我需要使用Excel中的VBA从网站下载CSV文件。服务器还需要对我进行身份验证,因为这是来自调查服务的数据。 我发现了很多使用VBA控制的Internet Explorer的示例。然而,它大多是缓慢的解决方案,而且大多数也很复杂。 更新:过了一会儿,我发现了一个使用Microsoft的漂亮解决方案。Excel中的XMLHTTP对象。我想分享下面的解决方案以供将来参考。

  • 问题内容: 我正在创建一个程序,通过读取同一游戏/应用程序的.jad文件中指定的URL,该程序将从Web服务器下载.jar(java)文件。我正在使用Python 3.2.1 我设法从JAD文件中提取JAR文件的URL(每个JAD文件都包含指向JAR文件的URL),但是正如您所想象的,提取的值是type()字符串。 相关功能如下: 但是,我总是得到一个错误,指出上面函数中的类型必须是字节,而不是字

  • 所以我做了一个应用程序来存储所有用户喜欢的应用程序的快捷方式,有点像一个集线器。我可以支持实际的文件,我有一个<代码>。快捷方式的lnk解析器。我认为应用程序支持互联网快捷方式也是非常好的。这就是我正在做的: 假设我试图获取Google的图标(< code > http://www . Google . com/favicon . ico )。 > < li> 我首先去掉多余的页面(例如< cod

  • 问题内容: 我需要从一个网站获取所有包含在一个文件夹中的所有图像。例如(site.com/images/.*)。这可能吗?如果是这样,最好的方法是什么? 问题答案: 看看HTTrack软件。它可以下载整个站点。提供网站地址,它将下载此目录中的所有内容。(如果目录访问不受所有者限制)

  • 问题内容: 我必须登录SnapSurveys并每月下载20多个文件。现在已经是一个繁琐的过程,现在我必须每周执行一次,而手工完成将变得很繁琐,所以我想实现它的自动化并安装了Selenium来做到这一点。我已经使用SeleniumIDE(在FireFox中)跟踪了整个过程,所以我知道我想做的事情以及如何做的基础知识,但是,我遇到了一个难以理解的砖墙,试图理解该网页。实现它的结构。 使用Chrome和