使用Swift / NSMutableURLRequest
调用Imgur API的NSMutableURLRequest
端点时出现问题,可能实际上我只是以错误的方式设置请求,因为我没有很多经验access_token
。
场景:
用户已经对我的应用程序进行了身份验证,他可以将照片发布到他的Imgur帐户
问题:
Imgur需要在28天后重新进行身份验证
这就是为什么在对应用程序进行身份验证后,您会获得(暂时; 28天)refresh_token
以及28天后使用的长期access_token
来获取新的access_token
。
我执行以下API调用以检索新的"Invalid grant_type parameter or parameter missing"
但始终收到错误:
400
,错误代码为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()
}
。
这是我的HTTP请求:
refreshKey
CLIENT_ID
,IMGUR_SECRET
和@foreach ($tindak as $item)
{{ $item['perbaikan_sementara'] }}
@endforeach
都应该是正确的。
提前感谢您的帮助!
答案 0 :(得分:3)
所以,我这样解决了:
let bodyString = "grant_type=refresh_token&client_secret=\(IMGUR_SECRET)&client_id=\(CLIENT_ID)&refresh_token=\(refreshKey)"
request.httpBody = bodyString.data(using: .utf8)
基本上在请求的正文中设置参数,而不是将它们放在URL中。 希望这也可以帮助别人:)