Word VBA发送POST请求内容为空问题求助
Word VBA POST请求内容为空问题修复
核心问题与修复点
变量引用错误(核心原因)
SendPostRequest过程定义了接收参数postData,但发送请求时错误使用了未在该过程中声明的strText变量——VBA会默认该变量为空值,导致实际发送的内容仅为data=,服务器自然接收不到有效数据。需将发送语句改为使用参数postData。特殊字符URL编码处理
如果TXT文件内容包含空格、&、=、中文等特殊字符,直接拼接成application/x-www-form-urlencoded格式会破坏数据结构,需对内容做URL编码处理。UTF-8文件编码兼容
FSO默认用系统本地编码读取文件,若你的TXT是UTF-8编码(带/不带BOM),可能出现读取乱码或空内容,需在读取时指定编码参数。
修复后的完整代码
Sub AutoOpen() Dim objFSO As Object Dim objFolder As Object Dim objFile As Object Dim strSourceFolder As String Dim strText As String strSourceFolder = Environ("USERPROFILE") & "\Desktop\myfolder\" Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FolderExists(strSourceFolder) Then Set objFolder = objFSO.GetFolder(strSourceFolder) For Each objFile In objFolder.Files If objFSO.GetExtensionName(objFile.Path) = "txt" Then strText = ReadTextFile(objFile.Path) SendPostRequest strText End If Next objFile Else MsgBox "未找到目标文件夹" End If Set objFile = Nothing Set objFolder = Nothing Set objFSO = Nothing End Sub Function ReadTextFile(ByVal filePath As String) As String Dim objFSO As Object Dim objFile As Object Dim strText As String Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FileExists(filePath) Then ' 指定UTF-8编码读取(TristateTrue对应UTF-8) Set objFile = objFSO.OpenTextFile(filePath, 1, False, TristateTrue) strText = objFile.ReadAll objFile.Close Else MsgBox "未找到文件:" & filePath End If Set objFile = Nothing Set objFSO = Nothing ReadTextFile = strText End Function Sub SendPostRequest(ByVal postData As String) Dim objHTTP As Object Dim URL As String Dim encodedData As String Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") URL = "https://urlrandom.com/" objHTTP.Open "POST", URL, False objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" ' 对内容做URL编码后发送 encodedData = "data=" & URLEncode(postData) objHTTP.send encodedData Set objHTTP = Nothing End Sub ' 新增URL编码函数 Function URLEncode(ByVal str As String) As String Dim objURLEncoder As Object Set objURLEncoder = CreateObject("System.Web.HttpUtility") URLEncode = objURLEncoder.UrlEncode(str) Set objURLEncoder = Nothing End Function
额外说明
- 若TXT文件为ANSI编码,可将
ReadTextFile中的TristateTrue改为TristateFalse(使用系统默认编码)。 - 若服务器要求接收JSON格式,需修改
Content-Type为application/json,并将发送内容调整为"{""data"":""" & postData & """}"(注意转义双引号)。
内容的提问来源于stack exchange,提问作者Vladimir91727
相关产品推荐
相关产品推荐

