gpt4 book ai didi

尝试下载文件时,R CMD 检查在 ubuntu 上失败,但功能在 R 中有效

转载 作者:行者123 更新时间:2023-12-04 03:38:36 24 4
gpt4 key购买 nike

我正在编写一个 R 程序包,它的一个功能是从链接下载并解压缩文件(但它不会导出给用户):

download_f <- function(download_dir) {
utils::download.file(
url = "https://servicos.ibama.gov.br/ctf/publico/areasembargadas/downloadListaAreasEmbargadas.php",
destfile = file.path(download_dir, "fines.rar"),
mode = 'wb',
method = 'libcurl'
)

utils::unzip(
zipfile = file.path(download_dir, "fines.rar"),
exdir = file.path(download_dir)
)
}

当我在某个其他函数中运行它以在 vignette 中编译示例时,这个函数对我来说工作正常。

但是,在 github 操作中使用 R CMD 检查,它在 ubuntu 16.04、发布和开发上始终失败。它[说][1]:

Error: Error: processing vignette 'IBAMA.Rmd' failed with diagnostics:
cannot open URL 'https://servicos.ibama.gov.br/ctf/publico/areasembargadas/downloadListaAreasEmbargadas.php'
--- failed re-building ‘IBAMA.Rmd’

SUMMARY: processing the following file failed:
‘IBAMA.Rmd’

Error: Error: Vignette re-building failed.
Execution halted
Error: Error in proc$get_built_file() : Build process failed
Calls: <Anonymous> ... build_package -> with_envvar -> force -> <Anonymous>
Execution halted
Error: Process completed with exit code 1.

当我运行 devtools::check() 时,它从未完成运行,永远停留在“创建小插图”中。我不知道这些问题是否相关,因为包装上还有其他小插图。

我通过了 mac os 和 windows 的 R CMD 检查。我试过在 utils::download.file 上切换“模式”和“方法”参数,但无济于事。

有什么建议吗?[1]: https://github.com/datazoompuc/datazoom.amazonia/pull/16/checks?check_run_id=2026865974

最佳答案

下载失败,因为 libcurl 尝试验证网络服务器证书,但无法验证。

我可以在我的系统上重现这个:

trying URL 'https://servicos.ibama.gov.br/ctf/publico/areasembargadas/downloadListaAreasEmbargadas.php'
Error in utils::download.file(url = "https://servicos.ibama.gov.br/ctf/publico/areasembargadas/downloadListaAreasEmbargadas.php", :
cannot open URL 'https://servicos.ibama.gov.br/ctf/publico/areasembargadas/downloadListaAreasEmbargadas.php'
In addition: Warning message:
In utils::download.file(url = "https://servicos.ibama.gov.br/ctf/publico/areasembargadas/downloadListaAreasEmbargadas.php", :
URL 'https://servicos.ibama.gov.br/ctf/publico/areasembargadas/downloadListaAreasEmbargadas.php': status was 'SSL peer certificate or SSH remote key was not OK'

服务器不允许您从 http 下载,而是重定向到 https,所以现在唯一要做的就是告诉 libcurl 不要检查证书并接受它正在获取的内容。

您可以通过将参数 -k 指定给 curl

来完成此操作
download_f <- function(download_dir) {
utils::download.file(
url = "https://servicos.ibama.gov.br/ctf/publico/areasembargadas/downloadListaAreasEmbargadas.php",
destfile = file.path(download_dir, "fines.rar"),
mode = 'wb',
method = 'curl',
extra = '-k'
)

utils::unzip(
zipfile = file.path(download_dir, "fines.rar"),
exdir = file.path(download_dir)
)
}

这也会产生一些下载进度条,您可以通过将额外设置为 -k -s

来使其静音

现在,您将面临中间攻击中的机器。 (你可能已经被这种方式攻击了,如果不与对方认识的人验证当前证书,就无法检查)所以你可以实现额外的检查,例如检查下载文件的 sha256sum 并在继续之前查看它是否与您预期收到的内容相符。

myfile <- system.file("fines.rar")
hash <- sha256(file(myfile))

关于尝试下载文件时,R CMD 检查在 ubuntu 上失败,但功能在 R 中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66467794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com