RStudio(或rterm)访问互联网的进程是什么?Windows防火墙下curl报错如何解决?
R Windows环境curl类网络功能防火墙异常解决方案
实际发起网络请求的进程说明
RStudio本身只是IDE外壳,所有R语言层面的网络请求(包括curl包调用)都是由R核心运行进程发起,常见对应进程包括:
- R安装目录下
bin/x64/或bin/i386/路径下的R.exe、Rterm.exe、Rscript.exe - 部分版本curl包会调用系统内置的curl工具,对应路径可在R中执行
Sys.which("curl")查看
可用解决方案
方案1:补全防火墙例外规则
要求IT管理员将以下路径的可执行文件全部添加到Windows防火墙出站规则允许列表:
- R安装目录下
bin文件夹内所有子目录下的全部exe文件(不要只添加RStudio主程序和单个R.exe) - 上一步查到的系统
curl.exe对应路径的程序 - 如果有自定义安装的其他R关联网络工具,也同步添加例外
方案2:配置R全局网络代理(无需修改防火墙规则,推荐企业内网环境使用)
如果企业有统一的内网出口代理,可通过配置R环境变量实现网络访问:
- 在R控制台执行
usethis::edit_r_environ()打开用户级环境配置文件 - 在文件中添加以下配置,替换为实际的企业代理地址和端口:
http_proxy=http://代理地址:端口 https_proxy=http://代理地址:端口 no_proxy=localhost,127.0.0.1,企业内部域名
- 保存文件后重启R会话即可生效,也可在当前会话临时生效执行:
Sys.setenv(http_proxy = "http://代理地址:端口") Sys.setenv(https_proxy = "http://代理地址:端口")
方案3:curl包单独适配配置
如果全局代理配置不生效,可单独为curl包设置请求参数:
library(curl) # 全局配置curl请求默认代理 options(curl_options = list( proxy = "http://代理地址:端口", ssl_verifypeer = FALSE # 如访问内网自签名证书的服务可添加该参数 ))
效果验证
配置完成后执行以下命令验证网络是否正常:
# 返回200即代表请求正常 curl::curl_fetch_memory("https://www.example.com")$status_code
如果访问的目标服务使用非80、443端口,还需管理员放通对应端口的出站访问权限。
内容的提问来源于stack exchange,提问作者user2106769
相关产品推荐
相关产品推荐

