Вызов RestAPI с базовой аутентификацией - PullRequest
0 голосов
/ 10 июля 2019

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

Я попытался сделать поле логина и пароля пустым, но ответ об успехе получен.Я считаю, что это проблема кеширования.Код, который я пробую, выглядит следующим образом:

@IBAction func sampleButtonAction()
    {
        let headers = [
            "cache-control": "no-cache"
        ]
        let login = "XXXXX"
        let password = "XXXXX"
        let request = NSMutableURLRequest(url: NSURL(string: "https://Sample.com")! as URL,
                                          cachePolicy: .reloadIgnoringLocalCacheData,
                                          timeoutInterval: 10.0)
        request.httpMethod = "GET"
        request.allHTTPHeaderFields = headers

        let config = URLSessionConfiguration.default
        let loginData = String(format: "%@:%@", login, password).data(using: String.Encoding.utf8)!
        let base64EncodedCredential = loginData.base64EncodedString()
        let authString = "Basic \(base64EncodedCredential)"
        config.httpAdditionalHeaders = ["Authorization" : authString]

        let session = URLSession.shared
        let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
            if (error != nil) {
                print(error!)
            } else {
                let httpResponse = response as? HTTPURLResponse
                print(httpResponse!)
                let responseData = String(data: data!, encoding: String.Encoding.utf8)
                print(responseData!)
            }
        })
        dataTask.resume()
    }

Может кто-нибудь указать, что я делаю неправильно ?.Заранее спасибо.

1 Ответ

0 голосов
/ 11 июля 2019

Я предполагаю, что вы имеете в виду, что error по-прежнему nil в обратном вызове, даже если код состояния HTTP находится за пределами 2xx.

Это ожидаемое поведение. Переменная error не равна nil только в случае сбоя действующего сетевого запроса, например, когда нет подключения к Интернету. Когда запрос завершится успешно, он будет равен нулю независимо от HTTP-кода ответа.

Итак, вам нужно расширить свою логику, включив проверку кода статуса ответа:

if (200 ... 299).contains(httpResponse.statusCode!)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...