Alamofire API (Digest Access Authentication) ошибка доступа к данным - PullRequest
0 голосов
/ 01 июня 2018

Я пытался Alamofire связываться с моим серверным API для получения данных JSON.Мой API использует Digest Access Authentication, но у меня изначально были проблемы с серверными проблемами, и мне удалось преодолеть его с помощью приведенного ниже кода.

    let userNameValue = "username"
    let passwordValue = "password"
    let credential = URLCredential(user: userNameValue, password: passwordValue, persistence: .forSession)        
    let sessionMananager = Alamofire.SessionManager.default
    let request = sessionMananager.request("http://httpbin.org/basic-auth/\(userNameValue)/\(passwordValue)")
        .authenticate(usingCredential: credential)
        .responseJSON { response in
            print("Response: \(String(describing: response.response))") // http url response
            print("Result: \(response.result)")                         // response serialization result
    }

Вывод был похож на

    Response:   
     { Status Code: 500, Headers {
           Connection =     (
               close
           );  
           "Content-Length" =     (
                0
           );
           "Content-Type" =     (
                "text/html; charset=UTF-8"
           );
     } }
    Result: FAILURE 

После некоторого поиска я изменил .responseJSON на .responseString, и вывод изменился, как показано ниже

    Response:   
     { Status Code: 500, Headers {
           Connection =     (
               close
           );  
           "Content-Length" =     (
                0
           );
           "Content-Type" =     (
                "text/html; charset=UTF-8"
           );  
     } }
    Result: SUCCESS

Чтобы убедиться, что проблема решена, я дал неверный пароль и попытался с .responseString, он дал выводс кодом состояния: 401.

Необходимые предложения

Чтобы получить данные из API,

Даже если код состояния: 500 является внутренней ошибкой,Я не думаю, что это проблема сервера.

1 Ответ

0 голосов
/ 06 января 2019

Я так и сделал:

let sessionMananager = Alamofire.SessionManager.default
    let credential = URLCredential(user: "bruce", password: "dickinson", persistence: .forSession)

    sessionMananager.request("https://httpbin.org/digest-auth/undefined/bruce/dickinson")
        .authenticate(usingCredential: credential)
        .responseJSON { response in
            print("Result: \(String(describing: response.response?.statusCode))")
            print(response.result)
            print(response.description)
    }
...