Alamofire 自定义标题不起作用
Posted
技术标签:
【中文标题】Alamofire 自定义标题不起作用【英文标题】:Alamofire custom header not working 【发布时间】:2016-03-21 02:47:43 【问题描述】:我正在尝试向Alamofire
请求添加自定义标头,但我认为标头未被识别。我仍然收到相同的结果,现在收到App Transport security
错误。我正在添加此处指定的标题-> http://developer.dribbble.com/v1/media/#comment-body-property(删除 html 并仅返回文本)。这是我到目前为止所尝试的。
let headers = ["Accept": "application/vnd.dribbble.v1.text+json"]
var manager: Manager = Manager.sharedInstance
manager.session.configuration.HTTPAdditionalHeaders = headers
manager.request(.GET, url, parameters: parameters).validate().responseJSON response in
switch response.result
case .Success:
if let value = response.result.value
let json = JSON(value)
case .Failure(let error):
print(error)
【问题讨论】:
您是否将“App Transport Security Setting”和“Allow Arbitrary Loads”设置为“YES”? @6245Htarwara 是的,刚刚做了,结果保持不变 【参考方案1】:您必须使用自定义标头传递 Alamofire
和 NSMutableURLRequest
。查看此issue 以获得更好的解释。
var request = NSMutableURLRequest(URL: NSURL(string: "YOUR URL HERE")!)
request.HTTPMethod = "GET"
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
request.addValue("application/vnd.dribbble.v1.text+json", forHTTPHeaderField: "Accept")
//Add paramaters (Optional)
let param = ["foo": "bar"]
let encoding = Alamofire.ParameterEncoding.URL
(request, _) = encoding.encode(request, parameters: param)
Alamofire.request(request).responseJSON response in
//DO SOMETHING WITH YOUR RESPONSE OBJECT
希望这会有所帮助:)
【讨论】:
【参考方案2】:试试这个:
Alamofire.request(.GET, url, parameters: parameters, headers: ["Accept": "application/json"]).responseJSON() response in
switch response.result
case .Success:
if let value = response.result.value
let json = JSON(value)
case .Failure(let error):
print(error)
【讨论】:
已经尝试过了,alamofire 返回一个错误,说明找不到标头类型。我会再试一次并尽快发布确切的错误"Response content type "application/json" does not match any acceptable content types: ["application/vnd.dribbble.v1.text+json"]"
那不行,header需要匹配dribble api指定的header。【参考方案3】:
也许为时已晚,但我相信可能会对其他人提供此解决方案。就我而言,我写的一切都很完美,但 Alamofire 没有发布标题。
经过长时间的尝试,我发现问题是我的 URL 没有以“/”结尾。因此,当我添加此标题时,标题按预期构成。
不工作:
http://\(baseUrl)/api/chat
但是这个是有效的:
http://\(baseUrl)/api/chat/
完整代码:
let url = "http://\(baseUrl)/api/chat/"
let headers: HTTPHeaders = ["Content-Type":"application/json",
"Authorization":"Token 57bbac4b15efb531c62558eb553372a0169d9c2e"]
Alamofire.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: headers )
.responseJSON response in
print(response.result.value as Any)
if let json = response.result.value
if(response.response?.statusCode == 200)
let responseDict = json as! [String : Any]
completion("Success", (response.response?.statusCode)!)
else
completion(nil, (response.response?.statusCode)!)
else
let httpError = response.result.error
let statusCode = httpError!._code
completion(nil, statusCode)
【讨论】:
以上是关于Alamofire 自定义标题不起作用的主要内容,如果未能解决你的问题,请参考以下文章