2017-01-07 34 views
1

更新到xcode8 Alamofire4後,我的AlamofireRequest無法正常工作,返回「狀態碼:401,頭」(未經授權)請求。用戶授權是正確的(我已經檢查過該網站)。我沒有任何編譯器錯誤,但請注意,'標題'不像往常一樣用藍色突出顯示,所以我認爲它不能正確識別標題。我在這裏做了什麼錯誤的'頭'?更新到ios10後,Alamofire4請求帶來錯誤狀態401

let user = "sampleUser" 
    let password = "samplepass" 
    let credentialData = "\(user):\(password)".data(using: String.Encoding.utf8)! 
    let base64Credentials = credentialData.base64EncodedString(options: []) 
    let headers = ["Authorization": "Basic \(base64Credentials)"] 

    var checkUserEndpoint: String = "https://sample.com/ios1/user/\(uidEntered!).json" 

    print(checkUserEndpoint) 

    Alamofire.request(checkUserEndpoint, method: .get, parameters: nil, encoding: JSONEncoding.default, headers : headers) 
     .responseJSON { response in 
       print(response.request) 
       print(response.response) 
       print(response.data) 

我已經嘗試用這個代替了頭,但它並沒有區別:

 var headers: HTTPHeaders = [:] 

    if let authorizationHeader = Request.authorizationHeader(user: user, password: password) { 
     headers[authorizationHeader.key] = authorizationHeader.value 
    } 

我也嘗試這樣做,它沒有什麼區別;

Alamofire.request(checkUserEndpoint, 
         method: .get, 
         parameters: nil, 
         encoding: JSONEncoding.default) 

     .authenticate(user: "sampleUser", password: "samplepass") 
     .validate() 
     .responseJSON { response in 
       print(response.request) 
       print(response.response) 
       print(response.data) 
       // print(response.error) 

回答

1

我已經做了類似的遷移兩次,我的猜測是,你的字符串中的一個傳遞產生頭值是可選的,即。 userpasswordbase64Credentials;雖然生成可選(「thestring」),而不是「thestring」。你可以嘗試這樣包裝請求:

if let user = user, password = password, base64Credentials = base64Credentials { 
    let headers = ["Authorization": "Basic \(base64Credentials)"] 

    var checkUserEndpoint: String = "https://sample.com/ios1/user/\(uidEntered!).json" 

    print(checkUserEndpoint) 

    Alamofire.request(checkUserEndpoint, method: .get, parameters: nil, encoding: JSONEncoding.default, headers : headers) 
     .responseJSON { response in 
       print(response.request) 
       print(response.response) 
       print(response.data) 
} 

這可能發生,例如,在這種情況下,這些值來自Objective-C代碼,其中變量未標記爲nonnull

... base64Credentials不應該是可選的,正如文檔中所述。

0

代碼在兩個變體(手動標題創建和Alamofire請求,驗證使用)中都是正確的。看起來像服務器端問題,使用curl/postman或任何其他REST客戶端從您的服務器接收成功響應,然後繼續您的應用程序開發。

相關問題