简体   繁体   中英

Alamofire not sending the current headers (swift)

I keep getting "error_type":"OAuthException","code":"41" when I using alamofire or even when i made it through to the server I got data from before header's authorisation. I think it keep sending same header, how to make sure that alamofire send the current headers?

    let headers = ["Authorization" : "\(AccessToken) \(TokenType)"]
    print(headers)

    Alamofire.request(.GET, "url/profile/", headers: headers, encoding: .JSON).responseJSON { response in
        switch response.result {}

EDIT First, I use login API

    let parameters = [
        "client_id": "\(Constant.clientId)",
        "client_secret": "\(Constant.clientSecret)",
        "response_type": "\(Constant.responseType)",
        "scope" : "\(Constant.scope)",
        "redirect_uri": "\(Constant.redirect)",
        "email": "\(email!)",
        "password": "\(pass!)"

    ]

    print(parameters)

    Alamofire.request(.POST, "http://url/login/", parameters: parameters, encoding: .JSON).responseJSON { response in
        switch response.result {
        case .Success:

            if let value = response.result.value {
                let json = JSON(value)
                print("JSON: \(json)")
                let accessToken = json["access_token"].string!
                let refreshToken = json["refresh_token"].string
                let tokenType = json["token_type"].string!
                let expiresIn = json["expires_in"].string
 }

And then, I use accessToken and tokenType for authorization

 if(refreshToken != nil)
                {
 let headersCust = ["Authorization" : "\(accessToken) \(tokenType)"]
                    print(headersCust)
Alamofire.request(.GET, "http://goodies.co.id/api/v1/customer/profile/", headers: headersCust, encoding: .JSON).responseJSON { response in {}

Usually this problem is caused by Redirection . Using some networking debugging tool like Proxyman helps you to understand if this is a case; if so :

this is Alamofire 5(AF 5) solution:

let headers: [String:String] = [...]
let params: [String: Any] = [...]
let url = URL(...)
let redirector = Redirector(behavior: Redirector.Behavior.modify({ (task, urlRequest, resp) in
  var urlRequest = urlRequest
  headers.forEach { header in
    urlRequest.addValue(header.value, forHTTPHeaderField: header.key)
  }
  return urlRequest
  }))
  //use desired request func of alamofire and your desired enconding
  AF.request(url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers)
            .responseJSON { response in
                //handleDataResponse...
            }.redirect(using: redirector)

I hope you are using the latest Alamofire so here is the code for .GET Request:

let headers = [
    "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==",
    "Content-Type": "application/x-www-form-urlencoded"
]

Alamofire.request(.GET, "https://httpbin.org/get", headers: headers)
         .responseJSON { response in
             debugPrint(response)
         }

Reference: https://github.com/Alamofire/Alamofire Try this out! And make sure you are sending the proper headers.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM