RCurl OS X El Capitan -9806 错误

RCurl on OS X El Capitan -9806 Error

我正在尝试使用 RCurl 进行 oauth 2 身份验证。我的代码是:

library(RCurl)
myOpts <- curlOptions(httpheader =  
      c(Accept="application/json",
    "Content-Type"="application/x-www-form-urlencoded"))

token <- postForm(authURL, 
    .params = list(
        client_id ="aaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
        client_secret = "bbbbbbbbbbbbbbbbbbbbbbbbbbbb",
        username = "xxxxx@yyyy.zzz",
        password = pswd), 
    .opts = myOpts, 
    style="POST")

该代码在 R/Windows 上运行良好,但在 OS X El Capitan 上运行不佳。在 OS X 上,我收到错误

Error in function (type, msg, asError = TRUE)  : 
SSLRead() return error -9806

我认为 OS X 附带的 curl/libcurl 版本中的 SSL 存在问题,并且在其他地方有记录,但我一直无法找出解决方法。对于它的价值,我在 httr 包中遇到了类似的问题。我如何更新 curl 并使其与 RCurl 完美配合?

我的问题与 非常相似,但是 El Capitan 很难按照 post 的答案中的建议复制 curl-config 文件。

您没有说明您使用的是哪个版本的 R 或 libcurl 或它们是如何安装的,因此您的问题的完整答案可能需要好几页才能涵盖所有可能的变体。 El Capitan 改变了安全设计。在 "rootless el capitan" 或 "el capitan system integrity protection" 上进行 google 搜索。大多数 /usr/ 现在默认锁定,/usr/local/ 除外。它是 ,但在您这样做之前,我建议您检查一下自制软件是否已更新以适应此更改。 (我认为它可能一直在使用 /usr/local/。)我还会确保您了解自制程序安装过程与 R 的 OSX 分支的维护者所期望的有何不同。

出于比较目的,我确实安装了 RCurl 的功能安装,如果是 IIRC,则安装在二进制版本的 R 3.2.2 中,我的 curl 版本报告看起来像。

machine-name-redacted-mac-pro:~ redacted$ curl --version
curl 7.43.0 (x86_64-apple-darwin15.0) libcurl/7.43.0 SecureTransport zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz UnixSockets 

# and in R
> packageVersion("RCurl") 
[1] ‘1.95.4.7’

> system("which curl")
/usr/bin/curl

我使用了以下方法:

  1. 使用通常的 gnu configure/make/install 序列从源安装 libressl。
  2. 使用通常的 gnu configure/make/install 序列再次从源安装 curl。在配置步骤中,我需要使用 --with-ca-bundle 选项将配置指向有效的证书文件。
  3. 从源代码编译 RCurl,确保 /usr/local/bin 在路径列表中比 /usr/bin 更早,以便 RCurl 的配置脚本从新版本的 curl 而不是 [=26] 中找到 curl-config =] x 默认版本。

我很想知道是否有更好的方法。