没有任何特殊库的Android OAUTH

时间:2017-02-26 19:55:14

标签: android oauth yelp

快速背景。我不是计算机科学家或程序员。只是尝试将Android视为个人挑战(帮助我与现代世界保持联系,这样我就能更好地理解我的孩子)。我开始时非常简单,并且正在慢慢地尝试解决更具挑战性的技能。

现在,我正在努力让OAUTH身份验证能够连接到Yelp API。我看了很多博客文章。我在这里搜索并阅读了很多主题。有些是有用的,有些对我来说太先进了。

据我所知,有些库可以用于OAUTH。例如,我可以安装路标库并使用它。这可能是我的下一步。现在,我一直试图在不使用任何特殊库的情况下连接到YELP API(请记住,这对我来说是一个学习练习)。

YELP文档似乎很简单。

Screenshot of YELP API documentation

我有我的客户端ID和客户端密钥。我尝试使用以下代码行来请求访问令牌。

Lines of code used to request access token

我的尝试失败了。我收到错误响应代码:400。

你能指出我的错误吗?

非常感谢您的帮助。

1 个答案:

答案 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
相关问题