尝试使用 R 从 SFTP 下载文件

Attempting to download files from SFTP using R

我正尝试在工作场所实施 R 并从我们处理的所有数据中节省一点时间。

我们收到的许多文件都是通过 SFTP 发送给我们的,因为它们包含敏感信息。

我查看了 Whosebug 和 Google,但似乎对我没有任何帮助。我尝试使用我在网上找到的示例中的 RCurl 库,但它不允许我将端口 (22) 作为登录详细信息的一部分包含在内。

library(RCurl)
protocol <- "sftp"
server <- "hostname"
userpwd <- "user:password"
tsfrFilename <- "Reports/Excelfile.xlsx"
ouptFilename <- "~/Test.xlsx"

url <- paste0(protocol, "://", server, tsfrFilename)
data <- getURL(url = url, userpwd=userpwd)

我最终收到了错误代码

Error in curlPerform(curl = curl, .opts = opts, .encoding = .encoding) : 
embedded nul in string:

我们将不胜感激任何帮助,因为这将为我们节省大量时间!

谢谢,

请注意,有两个包,RCurlrcurl。对于 RCurl,我成功地使用密钥文件通过 sftp 连接:

opts <- list(
    ssh.public.keyfile = pubkey, # file name
    ssh.private.keyfile = privatekey, # filename
    keypasswd <- keypasswd # optional password
) 
RCurl::getURL(url=uri, .opts = opts, curl = RCurl::getCurlHandle())

为此,您需要创建两个密钥文件,例如通过油灰或类似物。

这里的情况类似:Using R to download SAS file from ftp-server

我不是 r 方面的专家,但在给定的示例中,getBinaryUrl() 似乎有效,而不是 getURL()。

希望对您有所帮助 M

我在使用 getURI()getURL() 函数时也遇到了指定端口选项的问题。

为了指定端口,您只需将端口添加为 port = #### 而不是 port(####)。例如:

data <- getURI(url = url,
               userpwd = userpwd,
               port = 22)

现在,就像@MarkThomas 指出的那样,无论何时遇到编码错误,请尝试 getBinaryURL() 而不是 getURI()。在大多数情况下,这将允许您下载 SAS 个文件以及 UTF-8LATIN1!!

中的 .csv 个文件