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】:

您必须使用自定义标头传递 AlamofireNSMutableURLRequest。查看此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 自定义标题不起作用的主要内容,如果未能解决你的问题,请参考以下文章

AlamoFire:公钥固定不起作用

导入 Alamofire.swift 不起作用

alamofire 上传图像数组不起作用

Alamofire EmptyResponseCodes 不起作用

Alamofire 中的证书固定不起作用

Alamofire 服务器信任策略对我不起作用