【问题标题】:Attempting to download files from SFTP using R尝试使用 R 从 SFTP 下载文件
【发布时间】:2017-11-27 12:16:14
【问题描述】:

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

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

我在 StackOverflow 和 Google 上四处查看,但似乎没有什么对我有用。我尝试使用网上找到的示例中的 RCurl 库,但它不允许我将 port(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:

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

谢谢,

【问题讨论】:

    标签: r rcurl


    【解决方案1】:

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

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

    希望有所帮助 M

    【讨论】:

      【解决方案2】:

      请注意,有两个包,RCurlrcurl。对于RCurl,我成功使用keyfiles通过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())
      

      为此,您需要两个创建密钥文件,例如通过腻子或类似方法。

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-07-05
          • 1970-01-01
          • 2011-11-16
          • 2019-03-14
          • 1970-01-01
          • 2022-01-21
          • 2018-03-21
          • 1970-01-01
          相关资源
          最近更新 更多