excel - VBA:PUT 请求的身份验证问题
问题描述
我无法从 Excel VBA 验证以下对 Freshdesk API v2 的 PUT 请求。我是这个(VBA)的新手,但我认为我很接近,谁能告诉我这段代码有什么问题以及为什么我收到一条调试消息说
{"code":"invalid_credentials","message":"您必须登录才能执行此操作。"}?
Sub PutJSON()
Dim URL As String
Dim JSONString As String
Dim objHTTP As New WinHttpRequest
Dim token As String
Dim response As String
URL = "https://ourcompany.freshdesk.com/api/v2/time_entries/14001545629"
token = "1234567890:X"
objHTTP.Open "PUT", URL, False
objHTTP.setRequestHeader "Authorization", "Bearer " & token
objHTTP.setRequestHeader "Content-Type", "application/json"
JSONString = "{""billable"" : true, ""note"" : ""Updated from Excel!"", ""timer_running"" : false, ""agent_id"" : 14036310050, ""ticket_id"" : 37784, ""time_spent"" : ""02:00""}"
objHTTP.send JSONString
response = objHTTP.responseText
Debug.Print response
End Sub
解决方案
我已经破解了。API 令牌作为字符串提交,但需要编码为 base64。
我使用了我发现的以下功能:
Function EncodeBase64(text As String) As String
Dim arrData() As Byte
arrData = StrConv(text, vbFromUnicode)
Dim objXML As MSXML2.DOMDocument
Dim objNode As MSXML2.IXMLDOMElement
Set objXML = New MSXML2.DOMDocument
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
EncodeBase64 = objNode.text
Set objNode = Nothing
Set objXML = Nothing
End Function
并改变了线路
objHTTP.setRequestHeader "Authorization", "Bearer " & token
至
objHTTP.setRequestHeader "Authorization", "Bearer " & EncodeBase64(token)
推荐阅读
- leaflet - 我的第一个实验用地图、点和数学表达式学习 R 闪亮
- node.js - 使用 multer 将多个图像上传到 AWS S3
- download - 如何下载 HLS(HTTP Live Streaming)?
- rust - rltk vga 字体显示不正确
- r - 当 R 中缺少参数时,如何调用另一个函数以使用其默认参数?
- python - 尝试重命名文件时出现 WinError 17、WinError 12 和其他问题
- pic - XC16 MCU 系列宏
- android - 如何从第一个活动android studio中不存在的第二个活动添加新数据?
- stream - APIRTC:如何只记录选定的流?
- mysql - 如何配置没有响应的 mysql 数据库?