2017-09-10 1 views
0

Depuis une semaine, j'essaie d'obtenir un jeton d'authentification à partir d'un service Web tiers en utilisant leur API avec Alamofire. J'ai mis en place différents types de solutions. Le problème est que le service Web fournit uniquement la documentation sur la façon de se connecter à leur service en utilisant curl. Mais je veux me connecter avec Alamofire parce que je développe une application iOS. Ci-dessous, j'ai posté les différentes solutions que j'ai implémentées qui reviennent avec 400 code d'état ou 404. Quelqu'un aurait-il la gentillesse de me guider à travers cela?Convertir la commande Curl pour accélérer en utilisant Alamofire

Voici la commande curl Je veux convertir rapidement en utilisant Alamofire:

curl "https://api.webservice.com/oauth/token?client_id=<your-client-id>&client_secret=<your-client-secret>&grant_type=client_credentials" 

Pour recevoir un jeton d'accès du client d'authentification, vous devez lui fournir un numéro de client et secret client qui est à condition de.

Et voici quelques-unes des solutions que j'ai essayé la mise en œuvre:

func doAuth(){ 
    let parameters = ["ClientID": clientID, "clientSecret": clientSecret] 

    Alamofire.request("https://api.everypixel.com/oauth/token", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in 

     switch(response.result) { 
     case .success(_): 
      if response.result.value != nil{ 
       print(response.result.value as Any) 
      } 
      break 

     case .failure(_): 
      print(response.result.error as Any) 
      break 

     } 
    } 

    let user = clientID 
    let password = clientSecret 
    let credentialData = "\(user):\(password)".data(using: String.Encoding.utf8)! 
    let base64Credentials = credentialData.base64EncodedString(options: []) 
    let headers = ["Authorization": "Bearer \(base64Credentials)"] 
    print(credentialData) 
    Alamofire.request(tokenRequestURL, 
         method: .post, 
         parameters: nil, 
         encoding: URLEncoding.default, 
         headers:headers) 
     .validate() 
     .responseJSON { response in 
      if response.result.value != nil{ 
       print(response) 
      }else{ 

       print("found an error") 
      } 
    } 

    let response = Alamofire.request(tokenRequestURL, method: .get).authenticate(user: clientID, password: clientSecret).response?.statusCode 
    print(response) 


    let key = clientID 
    let secret = clientSecret 

    let url = tokenRequestURL 

    var request = URLRequest(url: url!) 

    request.addValue("application/json", forHTTPHeaderField: "Accept") 
    request.addValue("sso-key \(key):\(secret)", forHTTPHeaderField: "Authorization") 
    let task = URLSession.shared.dataTask(with: url!) { data, response, error in 
     guard error == nil else { 
      print(error!) 
      return 
     } 
     guard let data = data else { 
      print("Data is empty") 
      return 
     } 

     print(response) 
    } 

    task.resume() 
} 

Répondre

0

Dans votre code que vous utilisez method: .post, où il n'est pas nécessaire. De même, certains noms de paramètres incorrects (par exemple "ClientID": clientID doivent être renommés en "client_id": clientID). Cela pourrait être une cause de 400 ou 404 codes de statut.

Au moins cette demande GET a travaillé pour moi sans 400 ou 404 codes d'état:

Alamofire 
     .request(
      "https://api.everypixel.com/oauth/token", 
      parameters:[ 
       "client_id"  : clientID, 
       "client_secret" : clientSecret, 
       "grant_type" : "client_credentials" 
      ] 
     ) 
     .responseString { response in 
      switch response.result { 
      case .success(let value): 
       print("from .success \(value)") 
      case .failure(let error): 
       print(error) 
      } 
    }