使用Excel VBA下载的文件已损坏

使用Excel VBA下载的文件已损坏,excel,vba,pdf,ado,Excel,Vba,Pdf,Ado,我的Excel VBA宏向API发送POST多部分/表单数据请求,并接收应用程序/pdf文件作为响应 这是相关部分: Set xhr = CreateObject("MSXML2.XMLHTTP") xhr.Open "POST", Uri, False xhr.setRequestHeader "Content-Type", "multipart/form-data; boundary=" & strBou

我的Excel VBA宏向API发送POST多部分/表单数据请求,并接收应用程序/pdf文件作为响应

这是相关部分:

Set xhr = CreateObject("MSXML2.XMLHTTP")
xhr.Open "POST", Uri, False
xhr.setRequestHeader "Content-Type", "multipart/form-data; boundary=" & strBoundary
xhr.setRequestHeader "X-Api-Key", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
xhr.send (strBody)
If xhr.Status Then
    Set oStream = CreateObject("ADODB.Stream")
    oStream.Open
    oStream.Type = 1
    oStream.Write xhr.responseBody
    oStream.SaveToFile outputFileName, 2
    oStream.Close
End If
Set xhr = Nothing
任何PDF阅读器都无法读取下载的PDF文档。我检查了它的内容,它几乎与从其他客户端(如Postman、cURL)下载的文档相同,这是有效的PDF文档(即可以在PDF阅读器中打开)[已编辑]

例如,在VS代码中打开PDF文档时:

VBA宏已下载文件:

将其与邮递员下载的PDF进行比较(查看图片中的最后一行):

如果它是一个文本文件,这似乎是一个编码问题,但是我使用的ADODB.Stream应该能够很好地处理二进制文件


我遗漏了什么?

我认为这与无法保存数据有关,因为POST方法发送的数据在URL中不可见。也许您可以尝试使用selenium来实现这一点?@Sgdva我要求保存POST请求的响应,而不是请求本身。API是什么?它有文件吗?你想下载哪个文件?你想让我们从最后一行看到什么?您是否使用其他方法成功下载?@QHarr请阅读问题我已重新阅读。没有API文档链接,没有给出API端点,你暗示端点是不同的,但不要说太多(它们有什么不同?)成功/工作等词不会出现在任何地方<代码>其内容,与从其他客户端下载的文档(如Postman、cURL)几乎相同。-可能意味着没有被后一种方法损坏(如标题和最后一句),但没有说明它们在哪里工作。我问是因为我对所有问题的答案都不清楚。也许他们对其他能帮助你的人很清楚。