我正在尝试从我公司的Intranet sharepoint读取数据。
require(httr)
url <- "http://<domain>/<path>/_vti_bin/ListData.svc/<something>"
r <- GET(url)
问题是,对Sharepoint的访问使用Windows身份验证。以上,预计会给我401 Unauthorized错误。
如何将我的Windows身份验证合并到R中的请求中,而无需在GET
参数中以明文形式输入我的凭据? (使用authenticate()
使用我的凭据工作)。
答案 0 :(得分:1)
authenticate()
是正确使用的功能,但您需要更改输入,如下所示:
require(httr)
url <- "http://<domain>/<path>/_vti_bin/ListData.svc/<something>"
r <- GET(url, authenticate("username","password",type="any"))
我不确定哪种特定类型有效,但我能够使用any建立会话。我在httr包文档中找到了解决方案。
答案 1 :(得分:0)
如果身份验证对您有用,并且此处的主要目标是不对用户和密码进行硬编码并在脚本中公开,请尝试使用getPass软件包,该软件包具有一个名为getPass(msg =“ message的消息,您想显示“)打开一个提示,提示您输入一个字符串(任何观看您的屏幕的人都看不到),然后返回该字符串。
免责声明:如果采用这种方式,则运行脚本的任何人都必须具有安全性访问权限,并输入自己的凭据才能使脚本正常工作。另外,如果您在RStudio之类的环境中将您的环境显示在侧面板中,则值将暴露给任何看着您的肩膀的人:
require(httr)
require(getPass)
user <- getPass(msg="Enter User ID: ")
pw <- getPass(msg="Enter password: ")
url <- "http://<domain>/<path>/_vti_bin/ListData.svc/<something>"
r <- GET(url, authenticate(user,pw,type="any"))
答案 2 :(得分:0)
我能够使用RCurl
和XML
软件包中的功能组合对会话进行身份验证并将SharePoint列表转换为数据框。这是唯一对我有效的方法。
library(RCurl)
library(XML)
URL = "http://<domain>/<path>/_vti_bin/ListData.svc/<something>"
rawData = getURL(URL,userpwd=:"username:password")
xmlData = xmlParse(rawData)
items = getNodeSet(xmlData,"//m:properties")
df = xmlToDataFrame(items,stringsAsFactors=F)
答案 3 :(得分:0)
如果在使用Windows身份验证的公司网络上,则无需输入用户名和密码即可进行以下操作:
library(httr)
url <- "http://<domain>/<path>/_vti_bin/ListData.svc/<something>"
r <- GET(url, authenticate(":", ":", "ntlm"))
答案 4 :(得分:0)
为确保您不会像我一样秃顶,请确保将SharePoint网站中的读取访问权限项级别设置为“读取所有项”(here's参考)。
library(AzureGraph)
gr <- create_graph_login()
me <- gr$get_user("me")
url <- "https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items"
r <- call_graph_url(me$token, url, http_verb = c("GET"))