Как использовать этот curl в Excel VBA для аутентификации и получения сеансового ключа - PullRequest
0 голосов
/ 13 января 2020

этот завиток используется для получения ключа сеанса от API

    curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{
  "UserId": "ID",
  "Password": "PW"
}' 'https://website.com/api/v1/Login'

Мне нужно сгенерировать ключ сеанса в Excel для использования с другими кодами, которые я написал. это то, что у меня есть до сих пор.

    Sub GenAPISKey()

  Dim webServiceURL As String
  Dim actionType As String
  Dim targetWord As String
  Dim actionType2 As String
  Dim targetWord2 As String
  Dim UserID As String
  Dim Password As String

  webServiceURL = "https://website.com/api/v1/Login"
  actionType = "Accept"
  targetWord = "application/json"
  actionType2 = "Content-Type"
  targetWord2 = "application/json"
  UserID = "ID"
  Password = "PW"


  With CreateObject("Microsoft.XMLHTTP")
    .Open "POST", webServiceURL, False
    .SetRequestHeader actionType, targetWord
    .SetRequestHeader actionType2, targetWord2
    .SetCredentials "UserID", "Password", 0

    .Send
    If .Status = 200 Then
      Debug.Print .responseText

    Else
      MsgBox .Status & ": " & .StatusText
    End If
  End With

End Sub

Любые идеи о том, что я могу попробовать? Керл отлично работает, его версия VBA, я не могу работать с API.

1 Ответ

1 голос
/ 19 января 2020

Похоже, что .SetCredentials не является членом объекта XMLHTTP, который вы используете. У меня есть два предложения.

1) использовать другой объект, такой как объект WinHttpRequest:

With CreateObject("WinHttp.WinHttpRequest.5.1")
    .Open "POST", webServiceURL, False
    .SetRequestHeader actionType, targetWord
    .SetRequestHeader actionType2, targetWord2
    .SetCredentials "UserID", "Password", 0
    .Send
    If .Status = 200 Then
      Debug.Print .responseText

    Else
      MsgBox .Status & ": " & .StatusText
    End If
  End With

2) Если вы должны использовать объект XMLHTTP, попробуйте установить учетные данные в вызов метода .Open и избавление от строки .SetCredentials.

With CreateObject("Microsoft.XMLHTTP")
    .Open "POST", webServiceURL, False, "UserID", "Password"
    .SetRequestHeader actionType, targetWord
    .SetRequestHeader actionType2, targetWord2

    .Send
    If .Status = 200 Then
      Debug.Print .responseText

    Else
      MsgBox .Status & ": " & .StatusText
    End If
  End With

Редактировать:

Швы, как первый вариант, - путь к go для вас. Теперь я считаю, что вам просто нужно отправить через тело JSON, что хочет ваш API. На самом деле, вам, вероятно, даже не нужно устанавливать учетные данные, если так работает API. Глядя на вашу команду -curl, вы должны попробовать ....:

With CreateObject("WinHttp.WinHttpRequest.5.1")
    .Open "POST", webServiceURL, False
    .SetRequestHeader actionType, targetWord
    .SetRequestHeader actionType2, targetWord2

    .Send "{""UserId"": ""ID"", ""Password"": ""PW""}"
    If .Status = 200 Then
      Debug.Print .responseText

    Else
      MsgBox .Status & ": " & .StatusText
    End If
  End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...