2017-01-07 33 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客户端从您的服务器接收成功响应,然后继续您的应用程序开发。

相关问题