перевод curl_setopt в заголовок asp.net - PullRequest
0 голосов
/ 04 мая 2018

Я должен обратиться к Rest API из консольного приложения asp.net. Первый звонок - это логин для получения токена доступа. К сожалению, все примеры только на PHP, который я плохо читаю.

Пример PHP говорит:

use 'curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Authorization : Basic ".$encodedAuth));

и

Token Header: "Authorization: Basic {User,Colon,Password -> as Base64}"

Тип содержимого application/json.

EDIT: Комбинация пользователь / pwd устанавливается с помощью инструкции:

curl_setopt($this->curl, CURLOPT_USERPWD, $api_username . ':' . $api_password);

Что я должен установить в своем httpwebrequest для правильной передачи авторизации?

Я пытался

  Dim data As String = """grant_type"": ""client_credentials"""
  Dim postdata As Byte() = Encoding.UTF8.GetBytes(data)

  Dim req As HttpWebRequest = DirectCast(HttpWebRequest.Create(uploadURL), HttpWebRequest)
  req.Method = "POST"
  req.ContentType = "application/json;encoding=utf-8"
  req.ContentLength = postdata.Length
  req.Accept = "application/json"
  req.Credentials = New NetworkCredential(userID, userPW)
  req.Timeout = 600000
  req.Headers.Add("Authorization", userID & ":" & userPW)

но продолжайте получать код 400. Любая помощь приветствуется

1 Ответ

0 голосов
/ 05 мая 2018

Хорошо, это решение:

     Dim data As String = "{""grant_type"": ""client_credentials""}"
     Dim postdata As Byte() = Encoding.UTF8.GetBytes(data)

     Dim uploadURL As String = "https://api.dreamrobot.de/rest/v1.0/token.php"
     Dim userID As String = "xxxxxxx"
     Dim userPW As String = "xxxxxxx"

     Dim req As HttpWebRequest = DirectCast(HttpWebRequest.Create(loginURL), HttpWebRequest)
     req.Method = "POST"
     req.ContentType = "application/json;encoding=utf-8"
     req.ContentLength = postdata.Length
     req.Accept = "application/json"
     req.Timeout = 600000
     req.Headers.Add("Authorization", "Basic " & Convert.ToBase64String(Encoding.UTF8.GetBytes(userID & ":" & userPW), Base64FormattingOptions.None))

     Dim _stream As Stream = req.GetRequestStream()
     _stream.Write(postdata, 0, postdata.Length)
     _stream.Close()

     Dim _response As HttpWebResponse = req.GetResponse()
     Dim _reader As New StreamReader(_response.GetResponseStream)
     data = _reader.ReadToEnd
     _reader.Close()
     _response.Close()

Функция PHP setopt CURLOPT_USERPWD создает запись заголовка http «Authorization:», для которой требуется значение «Basic» & base64 (user: pwd). Важным моментом является преобразование в base64string БЕЗ перевода строки, следовательно, Base64FormattingOptions.None.

В данном случае используется адрес API DreamRobot Rest, здесь первый вызов для получения токена доступа.

...