快速背景。我不是计算机科学家或程序员。只是尝试将Android视为个人挑战(帮助我与现代世界保持联系,这样我就能更好地理解我的孩子)。我开始时非常简单,并且正在慢慢地尝试解决更具挑战性的技能。
现在,我正在努力让OAUTH身份验证能够连接到Yelp API。我看了很多博客文章。我在这里搜索并阅读了很多主题。有些是有用的,有些对我来说太先进了。
据我所知,有些库可以用于OAUTH。例如,我可以安装路标库并使用它。这可能是我的下一步。现在,我一直试图在不使用任何特殊库的情况下连接到YELP API(请记住,这对我来说是一个学习练习)。
YELP文档似乎很简单。
Screenshot of YELP API documentation
我有我的客户端ID和客户端密钥。我尝试使用以下代码行来请求访问令牌。
Lines of code used to request access token
我的尝试失败了。我收到错误响应代码:400。
你能指出我的错误吗?
非常感谢您的帮助。
答案 0 :(得分:0)
setRequestProperty(String key, String value)
方法既不用于查询参数,也不用于表单参数。该方法用于设置要发送的HTTP标头。
设置您的客户端ID和客户端密码:
String credentials = String.format("%s:%s", "MyClientId", "MyClientSecret");
byte[] credentialsBytes = credentials.getBytes("UTF-8");
String encoded = org.apache.commons.codec.binary.Base64.encodeBase64String(credentialsBytes);
String authorization = String.format("Basic %s", encoded);
hURLConnection.setRequestProperty("Authorization", authorization);
在请求正文中嵌入请求参数:
hURLConnection.setDoOutput(true);
byte[] bytes = "grant_type=client_credentials".getBytes("UTF-8");
OutputStream out = hURLConnection.getOutputStream();
out.write(bytes);
out.flush();
如果Yelp API支持" RFC 6750,2.2. Form-Encoded Body Parameter" ,您的客户端ID和客户端密钥可以与{{1一起嵌入到请求正文中请求参数。
grant_type