在 AFNetworking swift 的 header 响应中获取令牌值

Get value of token in header response of AFNetworking swift

我有一些 POST 网络服务,它们在 header 字段中具有令牌值
我如何读取这个值?
我用谷歌搜索,但所有答案都只是针对 header 字段
中的设定值 这是我在另一个文件中调用的注册函数 我想在 didReciveDataFromRegisterWebService 中访问 header 并为以后的网络服务使用令牌

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()   
}

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

这可能对您有所帮助(未经测试!)。 在你的完成处理程序中:

if let response = dataTask.response as? NSHTTPURLResponse {

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

        // do somthing 
    }
}

这是一个简短的示例,说明如何使用 Alamofire 访问一个 response headerFieldHTTPURLResponse 有一个名为 allHeaderFieldsDictionary 属性,您可以从中访问您的令牌值。在这里,我将其转换为 String

Alamofire.request("https://serviceURL.de", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in

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

            // do somthing 
        }

}