如何将 Alamofire 与自定义 headers 一起用于 POST 请求
How to use Alamofire with custom headers for POST request
我用 Alamofire
和自定义 header 实现了 POST 请求,因为我们使用 OAuth2,我们必须在 [=23] 中的每个请求中发送访问令牌=].在这种情况下,我必须使用自定义 header.
HTTP header 字段 Authorization
的访问令牌值对我不起作用。服务器生成错误,因为带有访问令牌的 OAuth 的 header 信息不可用。
但是我的代码有什么错误?
这是我当前的代码:
let URL = NSURL(string: url + "/server/rest/action")
var mutableURLRequest = NSMutableURLRequest(URL: URL!)
mutableURLRequest.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
//this method does not work anymore because it returns an error in the response
//Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders = ["Authorization": "Bearer \(accessToken)"]
Alamofire.Manager.sharedInstance
.request(.POST, mutableURLRequest, parameters: parameters, encoding: .JSON)
.validate()
.responseJSON {
(request, response, data, error) -> Void in
NSLog("REQUEST: \(request)")
NSLog("RESPONSE: \(response)")
NSLog("DATA: \(data)")
NSLog("ERROR: \(error)")
}
这是我如何将其与自定义一起使用的示例 headers:
var manager = Manager.sharedInstance
// Specifying the Headers we need
manager.session.configuration.HTTPAdditionalHeaders = [
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/vnd.lichess.v1+json",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "iMchess"
]
现在无论何时发出请求,它都会使用指定的 headers。
您重构的代码:
记得import Alamofire
let aManager = Manager.sharedInstance
manager.session.configuration.HTTPAdditionalHeaders = [
"Authorization": "Bearer \(accessToken)" ]
let URL = url + "/server/rest/action"
request(.POST, URL, encoding: .JSON)
.responseJSON {
(request, response, data, error) -> Void in
println("REQUEST: \(request)")
println("RESPONSE: \(response)")
println("DATA: \(data)")
println("ERROR: \(error)")
}
这是请求签名request(method: Method, URLString: URLStringConvertible>, parameters: [String : AnyObject]?, encoding: ParameterEncoding)
如您所见,您不必在其中传递 NSURL,只需传递 URL 的字符串,Alamofire 会处理其余部分。
有一个简单的解决方案来发送参数和 header 与 Swift 3 和 Alamofire 4.0
的单个 Alamofire 请求
let url = "myURL"
let parameters: Parameters = [
"param1": "hello",
"param2": "world"
]
let headers = [
"x-access-token": "myToken",
]
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in
if response.result.isFailure {
//In case of failure
}else {
//in case of success
}
}
let headers: HTTPHeaders = [
"Cookie": UserDefaultsUtil.getString(param: Constants.COOKIE),
"Accept": "application/json"
]
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
.responseObject { (response: DataResponse<Any>) in
if response.result.isSuccess {
}
else {
}
}
从 Alamofire 5.0.0 开始,您可以使用 HTTPHeader
类型的 collection 添加自定义 HTTP headers。因此,要添加自定义用户代理 header,您可以执行以下操作:
urlRequest.headers.add(.userAgent("Custom User Agent Here"))
我用 Alamofire
和自定义 header 实现了 POST 请求,因为我们使用 OAuth2,我们必须在 [=23] 中的每个请求中发送访问令牌=].在这种情况下,我必须使用自定义 header.
HTTP header 字段 Authorization
的访问令牌值对我不起作用。服务器生成错误,因为带有访问令牌的 OAuth 的 header 信息不可用。
但是我的代码有什么错误?
这是我当前的代码:
let URL = NSURL(string: url + "/server/rest/action")
var mutableURLRequest = NSMutableURLRequest(URL: URL!)
mutableURLRequest.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
//this method does not work anymore because it returns an error in the response
//Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders = ["Authorization": "Bearer \(accessToken)"]
Alamofire.Manager.sharedInstance
.request(.POST, mutableURLRequest, parameters: parameters, encoding: .JSON)
.validate()
.responseJSON {
(request, response, data, error) -> Void in
NSLog("REQUEST: \(request)")
NSLog("RESPONSE: \(response)")
NSLog("DATA: \(data)")
NSLog("ERROR: \(error)")
}
这是我如何将其与自定义一起使用的示例 headers:
var manager = Manager.sharedInstance
// Specifying the Headers we need
manager.session.configuration.HTTPAdditionalHeaders = [
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/vnd.lichess.v1+json",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "iMchess"
]
现在无论何时发出请求,它都会使用指定的 headers。
您重构的代码:
记得import Alamofire
let aManager = Manager.sharedInstance
manager.session.configuration.HTTPAdditionalHeaders = [
"Authorization": "Bearer \(accessToken)" ]
let URL = url + "/server/rest/action"
request(.POST, URL, encoding: .JSON)
.responseJSON {
(request, response, data, error) -> Void in
println("REQUEST: \(request)")
println("RESPONSE: \(response)")
println("DATA: \(data)")
println("ERROR: \(error)")
}
这是请求签名request(method: Method, URLString: URLStringConvertible>, parameters: [String : AnyObject]?, encoding: ParameterEncoding)
如您所见,您不必在其中传递 NSURL,只需传递 URL 的字符串,Alamofire 会处理其余部分。
有一个简单的解决方案来发送参数和 header 与 Swift 3 和 Alamofire 4.0
的单个 Alamofire 请求 let url = "myURL"
let parameters: Parameters = [
"param1": "hello",
"param2": "world"
]
let headers = [
"x-access-token": "myToken",
]
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in
if response.result.isFailure {
//In case of failure
}else {
//in case of success
}
}
let headers: HTTPHeaders = [
"Cookie": UserDefaultsUtil.getString(param: Constants.COOKIE),
"Accept": "application/json"
]
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
.responseObject { (response: DataResponse<Any>) in
if response.result.isSuccess {
}
else {
}
}
从 Alamofire 5.0.0 开始,您可以使用 HTTPHeader
类型的 collection 添加自定义 HTTP headers。因此,要添加自定义用户代理 header,您可以执行以下操作:
urlRequest.headers.add(.userAgent("Custom User Agent Here"))