Базовый ответ авторизации xmlhttprequest 400 Неправильный запрос - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь получить токен из API, используя Excel VBA.Он отлично работает, когда я записываю закодированное значение, например так (это просто пример, а не реальное значение):

strEncoded = "nQvS3irniorrFE8fjoijBi8W43nS4e9jOJji" 

Но когда я пытаюсь использовать функцию EncodeBase64, она возвращает ошибку 400 Bad Request.Я сравнил две строки, сгенерированные EncodeBase64, и ту, которую я написал, и они идентичны.Я что-то упустил ??

Public Sub XmlHttpTest()
Dim Json As Object
Dim tokenurl As String, strUser, strPassword As String
Dim strEncoded As String
Dim bearer As String, strDUE As String, strToEncode As String



Dim xmlhttp As New MSXML2.ServerXMLHTTP60

Set xmlhttp = CreateObject("MSXML2.serverXMLHTTP")


tokenurl = "https://apigateway.serpro.gov.br"
strUser = LTrim(RTrim(Sheet1.Cells(3, 4).Value))
strPassword = LTrim(RTrim(Sheet1.Cells(4, 4).Value))
strToEncode = strUser & ":" & strPassword
strEncoded = EncodeBase64(strToEncode)

xmlhttp.Open "POST", tokenurl, False

xmlhttp.setRequestHeader "Authorization", "Basic " & strEncoded

xmlhttp.send ("grant_type=client_credentials")

  If Not xmlhttp.Status = 200 Then
        MsgBox xmlhttp.statusText
        Exit Sub
    End If

Set Json = ParseJson(xmlhttp.responseText)
End Sub


Function EncodeBase64(text As String) As String
  Dim arrData() As Byte
  arrData = StrConv(text, vbFromUnicode)

  Dim objXML As MSXML2.DOMDocument60
  Dim objNode As MSXML2.IXMLDOMElement

  Set objXML = New MSXML2.DOMDocument60
  Set objNode = objXML.createElement("b64")

  objNode.DataType = "bin.base64"
  objNode.nodeTypedValue = arrData
  EncodeBase64 = objNode.text

  Set objNode = Nothing
  Set objXML = Nothing
End Function
...