【发布时间】:2020-09-05 14:14:15
【问题描述】:
我正在使用 FastAPI 构建一个 API,它必须可以从 Excel VBA 访问。 FastAPI 的 OAuth2 身份验证机制要求我发送“表单数据”POST 请求,但我不知道如何在 VBA 中使用 WinHTTPRequest 来执行此操作。
我已经有一个从 API 获取纯 JSON 的函数,但这是一个 GET 函数,我不确定在哪里指定“表单数据”部分,也不知道在哪里放置用户名和密码键值对。
这是一个处理一些错误的简单 VBA GET。我将如何修改它以使用用户名和密码字段进行表单数据 POST?
Public Function getreq(url As String)
Dim req As WinHttpRequest
Dim JsonString As String
Dim jp As Object
Dim resp As String
Dim errorstring As String
Set req = New WinHttpRequest
' req.SetRequestHeaderxxx ?
' this is where auth will go via POST form-data username and password?
req.Open "GET", url
On Error GoTo errhand:
req.Send
resp = req.ResponseText
If resp = "Internal Server Error" Then
resp = "{'error': 'Internal server error'}"
End If
getreq = resp
Exit Function
errhand:
Select Case Err.Number
Case -2147012894 'Code for Timeout
getreq = "{'error': 'Request timeout'}"
Case -2147012891 'Code for Invalid URL
getreq = "{'error': 'Bad url'}"
Case -2147012867 'Code for Invalid URL
getreq = "{'error': 'Cannot establish connection'}"
Case Else 'Add more Errorcodes here if wanted
errorstring = "Errornumber: " & Err.Number & vbNewLine & "Errordescription: " & Error(Err.Number)
getreq = "{'error': '" & errorstring & "'}"
End Select
End Function
【问题讨论】:
-
这VBA POST json to API 有帮助吗?如果使用基本身份验证,身份验证凭据通常通过
SetRequestHeader "Authorization", "basic " + Base64Encode(PasswordnUsername)发送。 -
否,因为您的示例是内容类型 JSON,我需要表单数据。
-
我认为没有太大区别。看看这里XmlHttpRequest – Http requests in Excel VBA这是发送表单数据。
-
我仍然看不出有任何理由坚持使用 WinHTTPRequest。有没有?但请在下面查看我的答案。实际上,无论您最终使用
WinHTTPRequest或MSXML2.ServerXMLHTTP.6.0还是MSXML2.serverXMLHTTP,结构总是非常相似。
标签: excel vba winhttp fastapi winhttprequest