我正在尝试连接到R中的StackExchange API。
当我尝试时:
library(httr)
end <- oauth_endpoint(authorize = "https://stackoverflow.com/oauth",
access = "https://stackoverflow.com/oauth")
myapp <- oauth_app("myapp",
key = "KEY", # tried swapping these
secret = "CLIENT SECRET",
redirect_uri = "https://stackoverflow.com/oauth/login_success")
token <- oauth2.0_token(end,
myapp)
浏览器将打开,但会导致以下消息(在浏览器中(:
Couldn't parse `client_id`
如果我尝试使用相反(反向(的key
和secret
值,或者将key
设置为值和secret=NULL
的事件(只是为了在没有特权访问的情况下进行测试(,也会发生这种情况。
StackExchange API文档说,他们给你的key
值并不是一个秘密,但client_secret
值才是。在oauth_app
帮助中,它说secret
"不等同于密码,也不是真正的秘密"。有趣。
目前,我只是尝试建立初始测试连接。
更新:我很好奇这是否真的是无法解析特殊字符的问题。我尝试转义密钥和client_secret中的 2 个括号 (((
(。这并没有改变任何事情。然后我尝试将两者设置为空字符串(即key = ""
等(,但这不知何故导致了相同的结果。我觉得这是一个线索,但我仍然不知道出了什么问题。
您使用的是隐式("客户端"(OAuth(SE API Doc(。
这意味着身份验证序列应类似于以下示例:
-
您的应用 HTTP GETS:
https://stackexchange.com/oauth/dialog?client_id=4709&scope=private_info&redirect_uri=https://stackexchange.com/oauth/login_success
client_id
和scope
根据您的情况设置的位置。 -
然后,您的应用将重定向到:
https://stackexchange.com/oauth/login_success#access_token=wdR8Lm7m4ibD48lfrCcFxQ))&expires=86399
例如。
其中
access_token
是需要身份验证的后续调用所需的内容。
我不是 r 编码员,但猜测语法应该是这样的:
myapp <- oauth_app("myapp",
client_id = "{Your App's ID}",
scope = "private_info", # Or whatever is desired. See the doc page linked above
redirect_uri = "https://stackoverflow.com/oauth/login_success")
client_secret
仅用于服务器端(显式(OAuth。- 出于配额目的,在所有后续调用中传递
key
,无论是否需要 OAuth。
我遇到了同样的错误,我的问题是我正在使用客户端密钥作为我的client_id参数的值