R语言customProDB包PrepareAnnotationRefseq函数curl兼容问题求助
解决customProDB包PrepareAnnotationRefseq函数的curl兼容性报错问题
问题描述
运行customProDB包的PrepareAnnotationRefseq函数时,因curl 4.3.2版本兼容性触发报错,错误信息如下:
In curlSetOpt(..., .opts = .opts, curl = h, .encoding = .encoding) : Error setting the option for # 3 (status = 43) (enum = 81) (value = 0x55822c7f3b70): A libcurl function was given a bad argument CURLOPT_SSL_VERIFYHOST no longer supports 1 as value!
修复思路及操作
1. 临时全局设置curl选项(快速验证)
在调用目标函数前,通过curl包修改全局的ssl_verifyhost参数为有效值(当前libcurl仅支持0或2,2为推荐的主机验证值):
library(curl) # 设置为验证主机名(推荐) options(curl = list(ssl_verifyhost = 2)) # 或临时关闭验证(仅用于测试,不建议生产环境) # options(curl = list(ssl_verifyhost = 0)) # 再运行原函数 PrepareAnnotationRefseq(genome='mm39',CDSfasta="geneseq.fasta",pepfasta="proteinseq.fasta", annotation_path, dbsnp = NULL, splice_matrix=FALSE, ClinVar=FALSE)
2. 修改customProDB包源码(永久修复)
找到包内设置curl选项的代码,将ssl_verifyhost=1替换为ssl_verifyhost=2:
- 第一步:获取包安装路径
cat(system.file(package = "customProDB"), "\n") - 第二步:定位到包含curl调用的脚本(通常是
R/PrepareAnnotationRefseq.R或负责网络请求的相关文件) - 第三步:搜索
ssl_verifyhost或CURLOPT_SSL_VERIFYHOST,找到设置值为1的代码行,替换为2
示例修改前:
修改后:handle_setopt(handle, ssl_verifyhost = 1)handle_setopt(handle, ssl_verifyhost = 2) - 第四步:重新加载包并测试
detach("package:customProDB", unload = TRUE) library(customProDB)
3. 降级curl版本(备选方案)
若修改源码存在困难,可降级curl到支持ssl_verifyhost=1的旧版本(对应libcurl版本需低于7.28.0,R的curl包版本也需匹配)。此方法可能引发其他依赖问题,需谨慎操作。
内容的提问来源于stack exchange,提问作者Seketoulie Keretsu
相关产品推荐
相关产品推荐

