【发布时间】:2019-08-29 15:29:19
【问题描述】:
我正在尝试使用 VBA 发布到 API。我有过去使用过的代码(与其他 API 一起使用),其结构和格式都有效。但这次没有,罪魁祸首似乎是发送命令。所以我在网上搜索并找到了一些关于如何格式化发送的不同示例,我已经尝试了所有这些示例,但它们都不起作用。
随附的代码示例包括我尝试格式化的几种方式。我已经注释掉了除一个之外的所有内容,但将其他内容留在了 cmets 中以显示我尝试过的内容。当您查看代码时,请知道我已经尝试了所有可能的注释掉代码的组合。
每次,我都会收到“未上传文件或提供 URL 或 base 64”的服务器响应。
但是,如果我将相同的变量放入 Postman 并从那里发送,它工作正常,所以我知道这不是 API 端的错误,这是我格式化 VBA 的方式。我已经多次检查数据以确保没有错别字。
如果有任何建议,我将不胜感激。
Sub macroPOST()
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
Url = "https://api.ocr.space/parse/image"
objHTTP.Open "POST", Url, False
'objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.setRequestHeader "apikey", "helloworld"
objHTTP.setRequestHeader "Content-Type", "multipart/form-data"
'objHTTP.setRequestHeader "Content-Type", "image/png"
objHTTP.Send ("url=http://dl.a9t9.com/ocrbenchmark/eng.png&filetype=PNG&language=eng&isOverlayRequired=false&iscreatesearchablepdf=false&issearchablepdfhidetextlayer=false")
'objHTTP.Send ("url=http://dl.a9t9.com/ocrbenchmark/eng.png")
'objHTTP.Send ("url%3Dhttp%3A%2F%2Fdl%2Ea9t9%2Ecom%2Focrbenchmark%2Feng%2Epng")
BodyContent = "{" & Chr(34) & "url" & Chr(34) & ":" & Chr(34) & "http://dl.a9t9.com/ocrbenchmark/eng.png" & Chr(34) & "}"
'objHTTP.Send (BodyContent)
replyTXT = objHTTP.responseText
If objHTTP.Status = "200" Then 'success
MsgBox replyTXT
Else
MsgBox ("Problem")
End If
End Sub
【问题讨论】:
-
你不应该在那里使用
(。只是objHTTP.Send = "YourString"(免责声明:我不知道在这种情况下这是否会解决您的问题,但是传递给过程的括号参数是有意义的,并且不是无害的) -
我以前没有使用过这个,但快速搜索显示curl is smart enough to read the file and upload the contents with your request。您将不得不根据您的情况对其进行调整。如何?我不知道。没有时间测试它。