簡體   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