iOS / IBM Cloud / Swift: публикация в Watson API с использованием AlamoFire - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь опубликовать в API анализатора тона Watson, используя AlamoFire, со следующим кодом.Это продолжает получать ошибку 401, которая очевидно означает неудачную авторизацию.Однако та же информация об идентификаторе пользователя и пароле работает с запросом curl.Так что, похоже, проблема не в идентификаторе пользователя / пароле, а в том, как я формирую запрос AlamoFire.

 func postToWatson () {
        print("post to watson called")
        let url: String =  "https://gateway.watsonplatform.net/tone-analyzer/api/v3/tone?version=2016-05-19"
        let message = "All you need is love"
        var parameters = [
           "username":"my-lengthy-username",
            "password":"my-ugly-password"]
        parameters["text"] = message
        Alamofire.request(url, parameters: parameters)
            .responseJSON { response in
                print(response.request)
                print(response.response)
                print(response.result)
        }
    }

Ниже приведено то, что я получаю от API с помощью приведенных выше команд печати:

Optional(https://gateway.watsonplatform.net/tone-analyzer/api/v3/tone?version=2016-05-19&password=xxxxxx&text=All%20you%20need%20is%20love&username=xxxxxxxxxxxx)
Optional(<NSHTTPURLResponse: 0x1740396a0> { URL: https://gateway.watsonplatform.net/tone-analyzer/api/v3/tone?version=2016-05-19&password=xxxxxx&text=All%20you%20need%20is%20love&username=xxxxxxxxxxxx } { status code: 401, headers {
    Connection = close;
    "Content-Encoding" = gzip;
    Date = "Wed, 30 May 2018 17:23:30 GMT";
    "Strict-Transport-Security" = "max-age=31536000;";
    "Www-Authenticate" = "Basic realm=\"IBM Watson Gateway(Log-in)\"";
    "X-Backside-Transport" = "OK OK,FAIL FAIL";
    "X-DP-Transit-ID" = "gateway02-1020566241";
    "X-DP-Watson-Tran-ID" = "gateway02-1020566241";
    "X-Global-Transaction-ID" = ffea405d5b0ede123cd49ae1;
    "x-dp-local-file" = true;
} })
SUCCESS

Что не так с кодом выше?

1 Ответ

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

Я не использовал AlamoFire, но, глядя на их документацию для выполнения запроса, аутентификация обрабатывается иначе, чем ваш код.

Имя пользователя / пароль не являются обычными параметрами,но вам нужно передать их в качестве заголовка аутентификации.В документах есть образцы для этого.Это объяснило бы 401, потому что аутентификация не передается Уотсону.

Не проверено, но что-то вроде этого должно работать:

 Alamofire.request(url)
    .authenticate(user: username, password: password)
    .responseJSON { response in
                print(response.request)
                print(response.response)
                print(response.result)
}
...