【问题标题】:Setting Custom HTTP Headers in Alamofire in iOS 7 not working在 iOS 7 中的 Alamofire 中设置自定义 HTTP 标头不起作用
【发布时间】:2015-01-03 06:17:53
【问题描述】:

我尝试在 iOS 7 中使用我的自定义 HTTP 标头设置 Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders,但我没有运气。

这在 iOS 8 中运行良好。

有人有什么建议吗?

【问题讨论】:

  • 我正在调查同样的问题
  • 这里也一样。我正在使用 xcode 6.1.1。

标签: ios7 swift http-headers ios8 alamofire


【解决方案1】:

以下是适用于 iOS 7 和 iOS 8 的完整代码

let URL = NSURL(string: request.url!)
var mutableURLRequest = NSMutableURLRequest(URL: URL!)
mutableURLRequest.HTTPMethod = Alamofire.Method.GET.rawValue

// Adding headers
var defaultHeaders = Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders ?? [:]
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.HTTPAdditionalHeaders = defaultHeaders

// Adding parameters
let manager = Alamofire.Manager(configuration: configuration)
let urlReq  = ParameterEncoding.URL.encode(mutableURLRequest, parameters: request.params).0
aReq = manager.request(urlReq)
aReq!.responseJSON { (req, response, JSON, error) in }

更多信息:Alamofire Issues - GitHub

【讨论】:

    【解决方案2】:

    我正在使用 NSMutableURLRequest 来设置自定义标头。

    检查这个例子。

    var request = NSMutableURLRequest(URL: NSURL(string: "http://example.com")!)
    request.HTTPMethod = "POST"
    request.setValue("<HEADER VALUE>", forHTTPHeaderField: "<HEADER FIELD>")
    
    var parameter: NSDictionary = ["dimensions" :["product" : ["name" : "macpro", "price" : "350"]]]
     request.HTTPBody = NSJSONSerialization.dataWithJSONObject(parameter, options: nil, error: nil)
    
    Alamofire.request(request).response { (request, response, result, error) -> Void in
                    // handle response
         println("\(request) \t \(response) \t \(result) \t \(error) ")
    }
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,最后我想出了狼吞虎咽的解决方案。 (我对原来的库做了一点改动,请注意!)

      我总是调用方法:

      public func request(method: Method, URLString: URLStringConvertible, parameters: [String: AnyObject]? = nil, encoding: ParameterEncoding = .URL) -> Request
      

      我注意到对方法的调用:

      private func URLRequest(method: Method, URL: URLStringConvertible) -> NSURLRequest
      

      就在这个函数里面我插入了一行代码:

      mutableURLRequest.setValue(valueHeader, forHTTPHeaderField: keyHeader)
      

      结果如下(为了清楚起见):

      private func URLRequest(method: Method, URL: URLStringConvertible) -> NSURLRequest {
          let mutableURLRequest = NSMutableURLRequest(URL: NSURL(string: URL.URLString)!)
          mutableURLRequest.HTTPMethod = method.rawValue
      
          if(contentHeader){
              mutableURLRequest.setValue(valueHeader, forHTTPHeaderField: keyHeader!)
          }
      
          return mutableURLRequest
      }
      

      我还创建了一种传递值的方法。 我希望这会奏效

      【讨论】:

        【解决方案4】:

        我让它工作了。

        这对 iOS7 没有影响:

        Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders = ["CustomHeader": customValue]
        

        不过,这适用于 iOS7 和 8:

        var headers = Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders ?? [:]
            headers["CustomHeader"] = customValue
        
            let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
            configuration.HTTPAdditionalHeaders = headers
        
            Alamofire
                .Manager(configuration: configuration)
                .request(.GET, "https://example.com/api/users", parameters: nil, encoding: .JSON)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多