Windows环境下如何修改R的httr包所使用的curl版本?
如何在Windows上指定R的curl包使用的curl版本
核心原因
R的curl包默认是静态编译绑定了特定版本的curl库,并非调用系统PATH里的curl可执行文件——这就是为什么调整系统PATH对curl::curl_version()$version结果无影响的原因。Sys.which('curl')和system('curl -V')查看的是系统可执行文件版本,而curl::curl_version()显示的是R包内置绑定的库版本。
解决方案
方案1:从源码编译curl包,指定外部curl库
这是最可靠的自定义版本方法,让R的curl包链接你指定的curl库(比如Rtools、Git或Anaconda自带的):
- 确认目标curl库的路径,例如:
- Git自带curl:
C:\Program Files\Git\mingw64\lib(库文件)和C:\Program Files\Git\mingw64\include(头文件) - Rtools自带curl:
C:\rtools40\mingw64\lib和C:\rtools40\mingw64\include
- Git自带curl:
- 设置环境变量,告知R编译时链接指定curl:
Sys.setenv(PKG_CONFIG_PATH = "C:/Program Files/Git/mingw64/lib/pkgconfig") # 替换为你的curl库的pkgconfig路径 Sys.setenv(BUILD_LIBCURL = "yes") - 卸载现有curl包,从源码重新安装:
remove.packages("curl") install.packages("curl", type = "source") - 验证版本:
curl::curl_version()$version
方案2:安装最新版curl包
如果不想手动编译,可以尝试安装GitHub上的最新版curl包,通常会绑定更新的curl库:
install.packages("devtools") devtools::install_github("jeroen/curl")
方案3:替换curl包内置的dll文件(风险较高)
找到R的curl包安装目录下的libcurl.dll(示例路径:C:\Users\[你的用户名]\Documents\R\win-library\[R版本]\curl\libs\x64\libcurl.dll),将你想要的同架构(x64/x86)新版本libcurl.dll替换进去。注意需确保依赖的ssl等配套dll也存在,否则会报错。
方案4:切换到支持系统curl的HTTP包
如果不想折腾curl包,可改用httr2(httr的替代方案),它支持指定系统curl路径:
install.packages("httr2") library(httr2) # 指定系统curl可执行文件路径 req <- request("https://example.com") %>% req_options(curl = "C:/Program Files/Git/mingw64/bin/curl.exe") resp <- req_perform(req)
验证方法
每次修改后,执行以下命令确认版本:
# 查看R包绑定的curl版本 curl::curl_version()$version # 查看实际请求的curl信息 httr::GET("https://httpbin.org/user-agent")
内容的提问来源于stack exchange,提问作者sbha
相关产品推荐
相关产品推荐

