繁体   English   中英

VBA POST请求发送包含上载文件的多部分表单数据

[英]VBA POST request sending multipart form data with uploading file

我很乐意就此主题提供一些意见,尤其是对于Excel / VBA。

通过使用网络流量监视器,我发现工作中的系统依赖于POST请求发送多部分/表单数据。 我用边界等方法破解了所有语法,并成功完成了上传和响应,为具有不同字段负载的表单复制了字符串构建。

我苦苦挣扎的一件事是如何包括上载的文件。 当我在流量监控器的请求正文中看到此消息时,它看起来像这样:

-----------------------------7d01ecf406a6
Content-Disposition: form-data; name="Reload"

False
-----------------------------7d01ecf406a6
Content-Disposition: form-data; name="ReferenceFile001"; filename="word.doc"
Content-Type: msoffice/word

<Binary File Not Shown>
---------------------------7d01ecf406a6    'After a file entry boundary not prefixed with 2 "-"
Content-Disposition: form-data; name="SomethingElse"

SomeRandomStuff
-----------------------------7d01ecf406a6--

因此,我做了一些挖掘工作,并找到了一些将文件转换为二进制文件并将其包含在字符串中的示例,然后再使用'strConv(theString,vbFromUnicode)转换整个内容。

但是我没有使用这种方法成功上传任何文件。 我尝试过不同的操作时遇到了各种各样的服务器回复错误,但是现在我无法得到任何错误响应...但是上传只是简单地没有成功。

我当前使用的代码类似于在这里找到的代码 并且我在下面包括了二进制转换位。 我也尝试过使用记录集和附加块,但在这里不断出错

基本上,我想知道是否有人在Excel / VBA中成功完成了此任务-具有多个字段的多部分表单,其中一些是文件上载。 是否有一种简单的技术将文件转换为二进制文件并将其包含在文本字符串中? 因为关于以下代码的主要问题是我们有一个普通的文本字符串,并将转换后的二进制文件粘贴在其中,然后在发送之前再次进行转换。 像这样将转换后的文件粘贴在字符串中间甚至有意义吗? 我之所以这样问,是因为在发送之前尝试查看文本文件中的字符串时,在尝试将“字符串”写入文本文件时出现错误!

我希望这是有道理的,所有的贡献都将不胜感激,我已经为此努力了几天。

stringToSend = String1 & getFile(thisworkbook.path & "filename.doc" & String2  '' Assume string1 and string2 are perfect,
'' I have this working even with file "deletions" where the following "getFile" function would return ""

Function GetFile(ByVal FileName As String) As String
    Dim FileContents() As Byte, FileNumber As Integer
    ReDim FileContents(FileLen(FileName) - 1)
    FileNumber = FreeFile()
    Open FileName For Binary As FileNumber
    Get FileNumber, , FileContents
    Close(FileNumber)
    GetFile = StrConv(FileContents, vbUnicode)
End Function

忘记GetFile函数! 因为发送到服务器的数据必须是Byte()数组,而不是String! 此链接中查看Jscript的最后代码,可以轻松地将其转换为VBA。 如果您无法成功上传文件,我将与您共享包含演示成功代码的excel文件的链接。

我自己的回答,因为我设法使该系统正常工作:

在将各种Strings和GetFile串联之后,最后一步是在发送POST请求之前在下面使用

strConv(sendRequest, vbFromUnicode)

我确信无论如何我都尝试过几次,但是也许我的弦乐构建缺少VbCrLf之类的东西。 无论如何,它确实有效! 好极了!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM