2017-09-10 1 views
0

지난 주 나는 Alamofire와 함께 API를 사용하여 타사 웹 서비스에서 인증 토큰을 얻으려고했습니다. 다른 유형의 솔루션을 구현했습니다. 문제는 웹 서비스가 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 상태 코드없이 나를 위해 일한

관련 문제