我有两个远程服务器,可以使用无密码 SSH 从我的计算机访问它们。我可以使用 R 包/函数将文件复制到这些服务器吗?我发现RCurl::scp但它只能从远程服务器复制文件。我需要做什么才能执行将文件传输到远程服务器的事务?
我正在尝试连接到 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 RCurl、 Using RCurl with SFTP 和 …
我正在尝试下载一个 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 中执行相同操作,则会弹出文件下载对话框并询问我是否要保存文件。
可能的相关资料:
在此先感谢您的时间!
您将如何SOAP使用 R 请求 EUR-Lex 的 API?
EUR-Lex 是一个包含许多法律行为的欧盟数据库。在他们的 Web 服务手册中,他们描述了他们的SOAP系统,但没有描述如何使用 R。我已经尝试了一段时间就业httr,RCurl但没有成功。我想使用 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使用RCurl或httr包?
以下三个答案似乎相关,但我不知道如何将它们应用到我的 EUR-Lex 示例中:
EUR-Lex API 链接:
我用 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包,如果它超过指定的时间段并且转到下一行代码,就放弃尝试下载网页?例如:
> 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连接到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进行授权.我有一个令牌和秘密,我只需要将它放在此代码中进行授权.
谢谢!
我想通过HTTPS OData连接读取一些数据,数据源需要Basic身份验证方案.我熟悉通常的curl/RCurl选项(例如username,userpwd和cainfo),但我不确定如何传递身份验证方案信息.
这是一个为另一个应用程序工作的同事的一些C#代码:
var bind = new HttpsTransportBindingElement();
bind.AuthenticationScheme = System.Net.AuthenticationSchemes.Basic;
Run Code Online (Sandbox Code Playgroud)
所以我想我需要找出RCurl等同的什么.NET值System.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) 我应该如何转换这一个班轮:
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
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选项重新连接(我真的没有找到任何东西),那将是惊人的.
感谢每一位帮助