我正在尝试访问API以获取有关http://github.com的信息。我在github(在开发人员应用程序中)的应用程序中为此URL创建并尝试使用httr库访问R。以下是代码
library(httr)
oauth_endpoints("github")
myapp <- oauth_app("github",key = "#####################",secret = "########################" )
(密钥被客户端ID替换,秘密被替换为secred id)
github_token <- oauth2.0_token(oauth_endpoints("github"), myapp)
这提示我以下
使用本地文件在R会话之间缓存OAuth访问凭据? 1:是的 2:没有
我选择了2(我之前尝试过选项1),然后显示以下内容
httpuv not installed, defaulting to out-of-band authentication
Please point your browser to the following url:
https://github.com/login/oauth/authorize?client_id=72939e1b6d499f4f1894&scope=&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code
输入授权码 任何人都能告诉我授权码是什么吗?
答案 0 :(得分:9)
授权代码是github在正确的OAuth 2.0'舞蹈'之后提供的代码(使用Hadley Wickham的术语)。最简单的方法是使用httpuv(install.packages("httpuv")
)。安装完成后,在端口1410上设置本地Web服务器,并且您已正确设置github应用程序(重定向到http://localhost:1410)。
如果您没有安装httpuv,那么httr的OAuth 2.0功能默认为带外授权。这要求GitHub重定向到urn:ietf:wg:oauth:2.0:oob&amp; response_type = cod,它应该在浏览器中显示授权代码,以便可以复制和粘贴它。但是,您几乎肯定会将某些不同的设置作为重定向URL,因此github会抱怨重定向URI不匹配。我不确定github是否可以配置为允许oob重定向(但我刚试过但似乎没有)。
不使用httpuv的唯一原因是,如果您在不允许您在端口1410上设置服务器的计算机上使用R,或者您是通过RStudio Server或SSH会话在远程计算机上使用R。在后一种情况下,将在远程计算机上设置Web服务器,但您的浏览器将尝试连接到本地计算机上的端口1410。您可以通过从本地计算机上的端口1410到远程计算机上的端口1410进行SSH端口转发来解决此问题。
另请注意,https://github.com/hadley/httr/blob/master/demo/oauth2-github.r的演示代码与oauth2-github演示的当前CRAN版本不同,包括Hadley应用程序的秘密,因此您可以按原样运行演示,而无需先设置自己的应用程序。
答案 1 :(得分:1)
这对我有用:
从https://github.com/rstudio/httpuv
安装包HTTPUV并且可能为当前用户设置\\R\library
权限以运行devtools :: install_github(“rstudio / httpuv”)`