Swift 3 个 Oauth2 Imgur 刷新密钥 - 错误 400 "Invalid grant_type parameter or parameter missing"

Swift 3 Oauth2 Imgur Refresh keys - error 400 "Invalid grant_type parameter or parameter missing"


我在使用 Swift / NSMutableURLRequest 调用 Imgur API 的 /oauth2/token 端点时遇到问题,也许实际上只是我以错误的方式设置了请求对 NSMutableURLRequest 没有很多经验。
场景:
用户已经验证了我的应用程序,他可以 post 照片到他的 Imgur 帐户。

问题:
Imgur要求28天后重新认证
这就是为什么在对应用程序进行身份验证后,您会得到一个(临时的;28 天)access_token 和一个长期的 refresh_token,您可以在 28 天后使用它来获得一个新的 access_token
我按照 API 调用来检索新的 access_token 但总是收到错误消息:
"Invalid grant_type parameter or parameter missing" 错误代码 400
这是我的 HTTP 请求:

if let reqUrl = URL(string: "https://api.imgur.com/oauth2/token?refresh_token=\(refreshKey)&client_id=\(CLIENT_ID)&client_secret=\(IMGUR_SECRET)&grant_type=refresh_token")
    {
        let request = NSMutableURLRequest(url: reqUrl)
        print("request: \(reqUrl)")
        request.httpMethod = "POST"
        request.setValue("Client-ID \(CLIENT_ID)", forHTTPHeaderField: "Authorization")
        request.addValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type")

        let task = URLSession.shared.dataTask(with: request as URLRequest){ data, response, error in
            if (error != nil){
                print("error: \(error)")
                return
            }
            print("response: \(response!)")
            let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
            print("response string: \(responseString!)")
        }
        task.resume()
    }

refreshKeyCLIENT_IDIMGUR_SECRET 应该都是正确的。

预先感谢您的帮助!

所以,我是这样解决的:

let bodyString = "grant_type=refresh_token&client_secret=\(IMGUR_SECRET)&client_id=\(CLIENT_ID)&refresh_token=\(refreshKey)"

request.httpBody = bodyString.data(using: .utf8)

基本上是在请求正文中设置参数,而不是将它们放在 URL 中。 希望这也能帮助其他人:)