在AFNetworking swift的标头响应中获取令牌的价值

时间:2016-12-10 08:47:17

标签: swift swift3 afnetworking

我有一些POST网络服务,他们在标题栏中有令牌值
我该如何阅读这个值?
我用Google搜索,但所有答案都只是标题字段中的设定值 这是我的注册功能,我在另一个文件中调用它 我想在didReciveDataFromRegisterWebService中使用访问头,并为以后的webservices使用令牌

func register(phone : String) {
    let configuration = URLSessionConfiguration.default
    let manager = AFURLSessionManager(sessionConfiguration: configuration)
    manager.responseSerializer = AFHTTPResponseSerializer()
    let req = AFHTTPRequestSerializer().request(withMethod: "POST", urlString: "http://192.168.1.228:8000/gcab/v1/driver/register", parameters: nil, error: nil)
    req.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    let insideDict  = ["phone_number" : phone , "device_id" : DeveloperAssistant.getDeviceID() ]
    let insideString = insideDict.convertToString()
    let jsonString = "data=\(insideString)"
    let jsonPostData = jsonString.data(using: .utf8)
    req.httpBody = jsonPostData!     
    let dataTask = manager.dataTask(with: req as URLRequest) { (response : URLResponse, data : Any?, error : Error?) in
        if data != nil {
            do{...}
            else{
                    let responseData =  WebServiceParser.parseDataToObject(data: dict, type: .register) as! RegisterWebServiceResponse
                    self.registerDelegate?.didReciveDataFromRegisterWebService!(data: responseData, error: nil, response: nil)
                }                   
                print("dict info is : \(dictInfo)")
            }catch let erro {
                print("erro darim \(erro)")
            }
            print("we have data ")
        }else{
            print("we don't have data")
        }
    }
    dataTask.resume()   
}

1 个答案:

答案 0 :(得分:1)

为什么使用AFNetworking?我在Objective-C中经常使用这个lib,但是自从Swift出来后我改为Alamofire,因为它是用Swift编写的,维护得非常好。

这可以帮到你(没有经过测试!)。 在完成处理程序中:

if let response = dataTask.response as? NSHTTPURLResponse {

    if let headerFieldValue =  response.allHeaderFields["YOUR_HEADER_FIELD"] as? String {

        // do somthing 
    }
}

以下是如何使用response headerField访问一个Alamofire的一个简短示例。 HTTPURLResponse有一个名为Dictionary的{​​{1}}属性,您可以从中访问您的令牌值。在这里,我将其转换为allHeaderFields

String