如何使用 VBA 通过 HTTP 发布上传 zip 文件?

Posted

技术标签:

【中文标题】如何使用 VBA 通过 HTTP 发布上传 zip 文件?【英文标题】:How do I upload a zip file via HTTP post using VBA? 【发布时间】:2011-04-25 18:30:56 【问题描述】:

这个问题已经被其他人以某种形式问过很多次,但大多数都没有得到回答,或者给出的答案是“使用 C#,duh!”,顺便说一句,这是一个非答案。 ;-)

我想通过 VBA 将 zip 文件上传到 Web 服务器。服务器端代码已经存在并且运行良好;它通过手动上传表单接受 zip 文件,并对 zip 文件的内容进行处理。

理论上,我计划将 zip 文件的二进制内容转换为 HTTP 请求字符串,并使用 WinHTTP 库中的一些方法将其发送到服务器。如果一切顺利,服务器端脚本(在 Perl 中)应该无法判断文件是来自 VBA 还是来自浏览器并继续正常工作。

但是,将 zip 文件转换为 HTTP 请求字符串似乎不是很简单。

在线搜索似乎表明存在 3 种常见策略:

方法一:WinHTTP和手动编码二进制到HTTP请求字符串

涉及以二进制模式打开文件并手动应用一些编码巫术来将二进制流更改为 HTTP 请求字符串并使用 WinHTTP 将其发送。 可怕的代码量。

方法二:WinHTTP

涉及使用 ADODB.Stream。不到十行代码。

方法 3:通过 SendKeys 自动化 IE

只有一个词可以描述这种黑客行为:糟糕!并且可能会在未来版本的 IE 中中断,如果还没有的话。不到十行代码。 安全风险。

我倾向于方法2,但是,文档很薄,代码示例很少,并且不确定它是否有效。大多数代码示例都不完整,并且经常有 cmets 说它们不起作用。这个方法真的有效吗?

方法 1 是下一个。

方法 3 请不要! (如果涉及到,宁愿使用C#。喜欢C#,只是要求只允许VBA)

谁有任何关于如何完成这项任务的好例子?

【问题讨论】:

How to send files via HTTP_POST with Excel using VBA?的可能重复 【参考方案1】:

在对上述所有方法(以及更多方法)进行了大量实验之后,我正在使用与您的“方法 1”差不多的东西 - 我正在使用来自 http://www.motobit.com/tips/detpg_post-binary-data-url/ 的项目 (2),但使用以下作业:

 Set http = CreateObject("WinHttp.WinHttprequest.5.1")

... 而不是该代码中建议的那个(我认为该代码有点老了)。但它并不完美——例如,到目前为止,我一直无法让它在我拥有的旧 Windows XP 机器上运行(在 Win7 上运行正常)。

【讨论】:

@GeneQ 你能帮我用 VBA 发布文件吗? @user793468 我急于赶上最后期限。等几天,我会发布代码。 几天过去了吗? 是的,很高兴听到这是如何做到的......这几天一直在尝试各种事情,但无济于事! 同意 - 很高兴知道您是如何实现这一目标的

以上是关于如何使用 VBA 通过 HTTP 发布上传 zip 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 VBA 中实现 Zip 功能?

如何通过 CLI 将 zip 文件上传和部署到 AWS elastic beanstalk?

压缩成zip文件并通过curl上传

如何使用 alamofire 上传 zip 数据?

如何将zip文件上传到ruby中的github版本

使用 excel vba 从 Web 下载 zip 文件