私はSwift 3のMS Translator API(現在は遊び場で遊んでいますが、ターゲットプラットフォームはiOSです)で作業しようとしています。しかし、私はOAuth2のアクセストークンを取得しようとしていたときに立ち往生しました。私は、次のコード(私はObtaining an access tokenでポートに例のコードを試してみました)している:Swift 3からMS Translatorアクセストークンを取得する方法は?
let clientId = "id".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
let clientSecret = "secret".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
let scope = "http://api.microsofttranslator.com".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
let translatorAccessURI = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13"
let requestDetails = "grant_type=client_credentials&client_id=\(clientId)&client_secret=\(clientSecret)&scope=\(scope)"
let postData = requestDetails.data(using: .ascii)!
let postLength = postData.count
var request = URLRequest(url: URL(string: translatorAccessURI)!)
request.httpMethod = "POST"
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("\(postLength)", forHTTPHeaderField: "Content-Length")
request.httpBody = postData
URLSession.shared.dataTask(with: webRequest) { (returnedData, response, error) in
let data = String(data: returnedData!, encoding: .ascii)
print(data)
print("**************")
print(response)
print("**************")
print(error)
}.resume()
はもちろん、私は有効なのclientIdと有効なclientSecretを使用しました。
ここで、コールバックは以下の情報を出力します。まず、returnedData要求が無効であるとのメッセージが含まれている、次のメッセージと一緒に:
"ACS90004: The request is not properly formatted."
第二に、応答は、(要求が適切にフォーマットされていないという事実に適合)400のコードが付属しています。
第3に、エラーはnilです。
私は同じURIを使用し、requestDetails文字列を生のボディメッセージ(私は手動でContent-Type
ヘッダーを追加しました)として置いて、同じ応答を得ました。しかし、私は郵便配達員のUIの体のタイプをapplication/x-www-form-urlencoded
に変更し、UIを介して要求の詳細をキー値のペアとして入力したところ、呼び出しは成功しました。今や、私はメッセージの書式設定や、Swift URLRequest/URLSession APIで何か悪いことをやっているようですが、何を保留にすることはできません。誰かが私を助けてくれますか?ありがとう。