在 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 headerField
。
HTTPURLResponse
有一个名为 allHeaderFields
的 Dictionary
属性,您可以从中访问您的令牌值。在这里,我将其转换为 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
}
}
我有一些 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 headerField
。
HTTPURLResponse
有一个名为 allHeaderFields
的 Dictionary
属性,您可以从中访问您的令牌值。在这里,我将其转换为 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
}
}