Аутентификация Swift Digest asyn c -http-клиент - PullRequest
1 голос
/ 13 января 2020

Я пытаюсь создать дайджест-аутентификацию, используя swift поверх swiftNIO. В конце я получаю следующую ошибку: Операция не может быть завершена. (Ошибка NIO.NIOConnectionError 1.)

Вот мой способ сделать:

// in the delegate I create my authorizationHeader
let authorizationHeader =  try httpClient.execute(request: digestRequest , delegate: delegate).wait()

тогда в основном потоке я делаю следующее:

var request = try HTTPClient.Request(url: url, method: .GET)

request.headers.add(name: "Authorization: \(authorizationHeader.description)" , value: "")
print (request.headers.description)
httpClient.execute(request: request).whenComplete { result in
    switch result {
    case .failure(let error):
        print (error.localizedDescription)
    case .success(let response):
        if response.status == .ok {
            print (response.status)
        } else {
            print ("error in response")
        }
    }
}

К сожалению Я не нашел другого способа создать заголовок. Мне пришлось передать значение "", потому что заголовок ответа должен быть (Википедия): "Авторизация:", а затем все остальное. Вот пример моего обобщенного заголовка ответа: [("Authorization: Digest username = \" myuser \ ", realm = \" Testserver \ ", nonce = \" 4F4L1eHYktYv6n7LR4s5yyL5uMiVgKSg \ ", uri = \" http://myurl \ ", response = \" 4bc3cdfc727bec9edebf6a55dac677a7 \ "", "")]

Я не уверен в ошибке: это из-за моего ответа на заголовок или потому, что я создаю новый запрос из основного потока и не внутри моего делегата, но httpclient всегда один и тот же экземпляр. Если он лежит в заголовке ответа, кажется, что не существует способа записать прямую строку ответа в заголовок с помощью asyn c -http-client.

Спасибо, Арнольд

...