标签: rcurl

R:将文件复制到远程服务器

我有两个远程服务器,可以使用无密码 SSH 从我的计算机访问它们。我可以使用 R 包/函数将文件复制到这些服务器吗?我发现RCurl::scp但它只能远程服务器复制文件。我需要做什么才能执行将文件传输远程服务器的事务?

r rcurl

5
推荐指数
1
解决办法
1859
查看次数

R:使用 RCurl 连接到 SFTP

我正在尝试连接到 SFTP 服务器。它是使用FIPS模式的加密服务器。我能够通过 WinSCP、FileZilla 和 bash sftp 命令连接并执行文件传输,没有任何问题

但是,我无法使用RCurl(R 版本=3.3.2,RCurl 版本=1.95-4.10,Windows 10)从 R 访问相同的 SFTP 。这是我的代码的样子以及正在生成的错误消息:

RCurl::ftpUpload(what="path/to/my/local/file.ext",
                 to = "sftp://my.eftp.server:portNumber/path/to/my/file.ext",
                 userpwd = "user:password",
                 .opts=curlOptions(verbose=TRUE))
Run Code Online (Sandbox Code Playgroud)

错误信息是:

*   Trying ###.###.###.##...
* Connected to my.eftp.server (###.###.###.##) port ## (#0)
* Failure establishing ssh session
* Closing connection 0
  Error in function (type, msg, asError = TRUE)  : 
  Failure establishing ssh session
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒。我参考了以下内容,但没有成功: sftp with R - sftp not a protocol with RCurlUsing RCurl with SFTP 和 …

sftp curl r fips rcurl

5
推荐指数
0
解决办法
2398
查看次数

使用 https URL 登录后下载文件

我正在尝试下载一个 excel 文件,我有该文件的链接,但我需要先登录该页面才能下载该文件。我已经通过 rvest、rcurl 和 httr 成功通过了登录页面,但是我在登录后下载文件非常困难。

url <- "https://website.com/console/login.do"
download_url <- "https://website.com/file.xls"
session <- html_session(url)
form <- html_form(session)[[1]]

filled_form <- set_values(form,
                          userid = user,
                          password = pass)

## Save main page url
main_page <- submit_form(session, filled_form)

download.file(download_url, "./file.xls", method = "curl")
Run Code Online (Sandbox Code Playgroud)

当我运行 download.file 命令时,该文件会在我的工作目录中弹出,但它不是我要下载的文件,实际上只是一个损坏的 .XLS 文件,没有数据。

作为参考,如果我通过chrome登录网站,并在登录后将下载链接粘贴到浏览器窗口中,文件会自动开始下载。如果我在 IE 中执行相同操作,则会弹出文件下载对话框并询问我是否要保存文件。

可能的相关资料:

  • 这是我的电脑在工作时禁用了 cookie,因此我无法使用浏览器中的 cookie
  • 我已经尝试使用基于 SO 上的大量帖子的 httr 和 rcurl 的不同方法无济于事

在此先感谢您的时间!

r rcurl httr rvest

5
推荐指数
1
解决办法
1015
查看次数

如何使用 R 执行 EUR-Lex API 的 SOAP 请求?

您将如何SOAP使用 R 请求 EUR-Lex 的 API?

EUR-Lex 是一个包含许多法律行为的欧盟数据库。在他们的 Web 服务手册中,他们描述了他们的SOAP系统,但没有描述如何使用 R。我已经尝试了一段时间就业httrRCurl但没有成功。我想使用 R 而不是 SOAPUI。

这里有人有这方面的经验吗?

从下面的链接中,我应该按如下方式定义正文吗?

body <- "<sear:searchRequest>
<sear:expertQuery>${expert query}</sear:expertQuery> <sear:page>${page}</sear:page>
<sear:pageSize>${pageSize}</sear:pageSize> <sear:searchLanguage>${search language
</sear:searchLanguage>
          </sear:searchRequest>"
Run Code Online (Sandbox Code Playgroud)

然后我如何将其与 结合起来headerfields使用RCurlhttr包?

以下三个答案似乎相关,但我不知道如何将它们应用到我的 EUR-Lex 示例中:

  1. 如何将 SOAP 请求curl 转换为 RCurl
  2. 带有 WSDL for R 的 SOAP 客户端
  3. R 中的 SOAP 请求

EUR-Lex API 链接:

  1. WSDL: https: //eur-lex.europa.eu/eurlex-ws?wsdl
  2. 手册:https ://eur-lex.europa.eu/content/tools/webservices/SearchWebServiceUserManual_v2.00.pdf

soap web-services r rcurl httr

5
推荐指数
1
解决办法
960
查看次数

在 R 中下载多个文件的更快方法

我用 R 编写了一个小型下载器,以便一次运行从远程服务器下载一些日志文件:

file_remote <- fun_to_list_URLs()
file_local <- fun_to_gen_local_paths()
credentials <- "usr/pwd"

downloader <- function(file_remote, file_local, credentials) {
  data_bin <- RCurl::getBinaryURL(
    file_remote,
    userpwd = credentials,
    ftp.use.epsv = FALSE,
    forbid.reuse = TRUE
  )
  
  writeBin(data_bin, file_local)
}
  
purrr::walk2(
  file_remote,
  file_local,
  ~ downloader(
    file_remote = .x,
    file_local = .y,
    credentials = credentials
  )
)
Run Code Online (Sandbox Code Playgroud)

这可行,但速度很慢,尤其是与 WinSCP 等一些 FTP 客户端相比,下载 64 个日志文件,每个 2kb,需要几分钟。

R中有没有更快的方法来下载大量文件?

r rcurl r-download.file

5
推荐指数
1
解决办法
1129
查看次数

如果花费太长时间,如何停止执行RCurl :: getURL()?

有没有办法告诉R或RCurl包,如果它超过指定的时间段并且转到下一行代码,就放弃尝试下载网页?例如:

> library(RCurl)
> u = "http://photos.prnewswire.com/prnh/20110713/NY34814-b"
> getURL(u, followLocation = TRUE)
> print("next line") # programme does not get this far
Run Code Online (Sandbox Code Playgroud)

这将挂在我的系统上,而不是进入最后一行.

编辑:基于@Richie Cotton的答案,虽然我可以"实现我想要的",但我不明白为什么需要比预期更长的时间.例如,如果我执行以下操作,系统会挂起,直到我在RGUI中选择/取消选择"Misc >> Buffered Output"选项:

> system.time(getURL(u, followLocation = TRUE, .opts = list(timeout = 1)))
Error in curlPerform(curl = curl, .opts = opts, .encoding = .encoding) : 
  Operation timed out after 1000 milliseconds with 0 out of 0 bytes received
Timing stopped at: 0.02 0.08 ***6.76*** 
Run Code Online (Sandbox Code Playgroud)

解决方案:根据@Duncan的帖子,然后看看卷曲文档,我通过使用maxredirs选项找到了解决方案,如下所示:

> getURL(u, followLocation = TRUE, .opts = list(timeout = 1, …
Run Code Online (Sandbox Code Playgroud)

r rcurl

4
推荐指数
2
解决办法
2537
查看次数

Oauth与R中的Twitter Streaming API(使用RCurl)

我想使用R中的RCurl连接到Twitter的Streaming API,并且还能够过滤关键字.但是,Twitter API v1.1中对授权的新限制使得使用RCurl变得困难.

以前,代码可以从这个页面取得这样的东西:

 getURL("https://stream.twitter.com/1/statuses/filter.json", 
   userpwd="Username:Password",
   cainfo = "cacert.pem",
   write=my.function,
   postfields="track=bruins")
Run Code Online (Sandbox Code Playgroud)

但现在,Twitter的新API正在让用户通过OAuth进行授权.我有一个令牌和秘密,我只需要将它放在此代码中进行授权.

谢谢!

api streaming r keyword rcurl

4
推荐指数
1
解决办法
6143
查看次数

通过OData读取数据:如何通过curl/RCurl指定身份验证方案?

我想通过HTTPS OData连接读取一些数据,数据源需要Basic身份验证方案.我熟悉通常的curl/RCurl选项(例如username,userpwdcainfo),但我不确定如何传递身份验证方案信息.

这是一个为另一个应用程序工作的同事的一些C#代码:

var bind = new HttpsTransportBindingElement();
bind.AuthenticationScheme = System.Net.AuthenticationSchemes.Basic;
Run Code Online (Sandbox Code Playgroud)

所以我想我需要找出RCurl等同的什么.NETSystem.Net.AuthenticationSchemes.Basic将在R /卷曲的世界?


这是我到目前为止提出的:

忽略任何身份验证信息

web_page = getURL(
  url = "https://xxxx.sapbydesign.com/sap/byd/odata/cc_home_analytics.svc/path/to/ressource", 
  username = "<username>",
  userpwd = "*****",
  cainfo = "inst/ssl/ca-bundle.pem"
)
Run Code Online (Sandbox Code Playgroud)

这就是我得到的答案(通过谷歌Chrome翻译成德语):

<DOCTYPE html PUBLIC "- / / W3C / / DTD XHTML 1.0 Strict / / EN"
    "Http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <Meta name = "generator" content =
  "HTML Tidy for Linux/x86 (vers …
Run Code Online (Sandbox Code Playgroud)

https r rcurl odata

4
推荐指数
1
解决办法
1917
查看次数

如何将SOAP请求curl转换为RCurl

我应该如何转换这一个班轮:

curl -d @request.xml -o response.xml http://www.sample.com/soap
Run Code Online (Sandbox Code Playgroud)

它正在访问请求xml,如下所示:

<?xml version="1.0" encoding="utf-8"?>
     <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://sample.com/">
    <soap:Body>
      <req:getEvents>
        <start>2014-12-12T00:00:00+0100</start>
        <end>2014-12-13T00:00:00+0100</end>
        <type>TYPE</type>
      </req:getEvents>
     </soap:Body>
    </soap:Envelope>
Run Code Online (Sandbox Code Playgroud)

响应写入response.xml我想直接将响应读入r

curl r rcurl

4
推荐指数
1
解决办法
2144
查看次数

在R中的异常处理中分配值

 while(bo!=10){
  x = tryCatch(getURLContent(Site, verbose = F, curl = handle),
            error = function(e) {
               cat("ERROR1: ", e$message, "\n")
               Sys.sleep(1)
               print("reconntecting...")
               bo <- bo+1
               print(bo)
               })
  print(bo)
  if(bo==0) bo=10 
}
Run Code Online (Sandbox Code Playgroud)

我想尝试在连接失败后重新连接每秒.但是bo值的新赋值是无效的.我怎样才能做到这一点?或者,如果您知道如何使用RCurl选项重新连接(我真的没有找到任何东西),那将是惊人的.

感谢每一位帮助

exception-handling r variable-assignment rcurl

4
推荐指数
2
解决办法
494
查看次数