VBA POST请求使用上传文件发送多部分表单数据

时间:2016-11-22 18:38:46

标签: excel vba excel-vba post file-upload

我很想得到关于这个主题的一些意见,特别是对于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)转换整个文件

但是我没有使用此方法成功上传文件。我有各种服务器回复错误,因为我尝试了不同的东西,但现在我正处于我没有得到任何错误响应...但上传只是简单的不成功。

我目前使用的代码与找到的代码类似 Here!我已经在下面添加了二进制转换位。 我也尝试过使用记录集并附加块,但仍然遇到错误here

基本上我想知道是否有人在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

2 个答案:

答案 0 :(得分:1)

忘记GetFile功能!因为发送到服务器的数据必须是Byte()数组,而不是String! 在this link查看Jscript的最后一个代码,轻松将其转换为VBA。如果你无法成功上传文件,我会分享你的链接excel文件包含demo成功代码上传文件。

答案 1 :(得分:0)

我自己的回答,因为我设法使这个系统起作用:

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

strConv(sendRequest, vbFromUnicode)

我确信无论如何我已经尝试了几次,但也许我的弦乐构建中缺少VbCrLf或其他东西。无论如何,它的工作!耶!