我在使用 Swift/NSMutableURLRequest
调用 Imgur API 的 /oauth2/token
端点时遇到问题,也许这实际上只是我以错误的方式设置了请求,因为我对 NSMutableURLRequest
没有太多经验。
场景:
用户已经验证了我的应用程序,他可以将照片发布到他的 Imgur 帐户。
问题:
Imgur要求28天后重新认证。
这就是为什么在对应用程序进行身份验证后,您会得到一个(临时的;28 天)access_token
和一个长期的 refresh_token
,您可以在 28 天后使用它来获得一个新的 访问 token
。
我按照 API 调用来检索新的 access_token
但总是收到错误:
“无效的 grant_type 参数或缺少参数”
,错误代码为 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 3 Oauth2 Imgur 刷新键 - 错误 400 "Invalid grant_type parameter or parameter missing",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42954997/