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()
}
refreshKey
、CLIENT_ID
和 IMGUR_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 中。
希望这也能帮助其他人:)
我在使用 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()
}
refreshKey
、CLIENT_ID
和 IMGUR_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 中。 希望这也能帮助其他人:)