2017-09-10 9 views
0

先週、AlamofireでAPIを使用してサードパーティのWebサービスから認証トークンを取得しようとしました。私はさまざまなタイプのソリューションを実装しています。問題は、Webサービスがcurlを使用してサービスに接続する方法に関するドキュメントのみを提供していることです。しかし、私はiOSアプリを開発しているので、Alamofireを使って接続したいと思っています。Alamofireを使用してCurlコマンドを変換する

私は、私が実装したさまざまなソリューションを、ステータスコード400または404で戻ってきました。ここで

私はAlamofireを使用して迅速に変換したいcurlコマンドです:認証クライアントからのアクセストークンを受信するためには、あるクライアントIDとクライアントシークレットでそれを提供する必要が

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

提供されます。

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() 
} 

答えて

0

をあなたのコードでは、あなたがそれを必要としないmethod: .postを、使用している:ここ

そして、私が実装しようとしたソリューションの一部です。また、間違ったパラメータ名があります(例:"ClientID": clientID"client_id": clientIDに名前を変更する必要があります)。これは、400または404ステータスコードの原因である可能性があります。

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) 
      } 
    } 

、少なくともこのGETリクエストは、400のまたは404ステータスコードなしで私のために働きました

関連する問題