我正在尝试使用curl包函数访问web服务器。我收到"recv失败:连接已重置“错误。我知道,这是防火墙的问题,因为在其他网络中,它是有效的。所以我需要知道Rstudio使用哪个进程来访问Internet。我的IT管理员从Rstudio和R语言文件夹中添加了一些exe文件作为防火墙上的例外,因此R studio现在可以安装软件包。但是其他一些东西,比如curl仍然不起作用。有没有什么解决方案,可以让R函数在Windows防火墙后工作?
发布于 2021-05-17 21:48:42
如果你使用的是Windows,有不止一种方法可以访问互联网,我已经多次遇到过这个问题。您将熟悉Curl,它被许多底层库使用,例如RCurl和httr。
然而,R默认使用的方法实际上是基于WinINet的,用于install.packages()、url()和file()等操作。不深入细节,WinInet是Internet Explorer用来访问web的同一个库。
WinINet is more limited in its functionalities than Curl ,但是如果你正在做一些像下载文件这样基本的事情,你应该不会有问题。
下面您将看到一个示例,说明如何使用httr编写的脚本并重新执行,以便可以使用像url这样的函数来完成。
您还应该注意,假设您已经安装了curl,那么在Windows上,您可以更改file和url的默认设置,使它们依赖于curl而不是WinINet。
下面是一些使用httr下载文件的代码
library(httr)
url <- "https://rawgit.com/yoke2/dsxref/master/iris.xlsx"
GET(url, write_disk("iris.xlsx", overwrite=TRUE))下面是download.file()的等价物
url = "https://vincentarelbundock.github.io/Rdatasets/csv/datasets/iris.csv"
download.file(url, "iris.csv", quiet=TRUE)下面是使用httr执行curl GET操作的一些代码
我们从https://jsonplaceholder.typicode.com/检索JSON示例
library(httr)
response <- httr::GET('https://jsonplaceholder.typicode.com/todos/1')
content <- httr::content(response)这里有一种依赖于url的方法
Windows上的此方法将使用WinINet
library(jsonlite)
u <- url('https://jsonplaceholder.typicode.com/todos/1')
json <- readLines(u, warn = FALSE)
content <- parse_json(json)您可以通过对任何相关函数(url、file、file.download)使用help命令来了解有关WinINet的更多信息,这是一个很好的入门之处。
https://stackoverflow.com/questions/67568806
复制相似问题