gpt4 book ai didi

r - 在 R 中使用 httr 通过 SSL 获取网站内容

转载 作者:太空宇宙 更新时间:2023-11-03 13:12:02 26 4
gpt4 key购买 nike

我正在尝试使用 R 中的 HTTP POST 方法从我的服务器获取一个 JSON 数组。

我已经尝试使用 httrPOST 函数和 RCurlgetURL 函数,但两者都返回错误。

cafile <- system.file("CurlSSL", "cacert.pem", package = "RCurl")
url <- "https://example.com/query/getData.php"

POST(url,body=NULL)
POST(url,body=NULL,config(cainfo=cafile))

getURL(url)
getURL(url,cainfo=cafile)

POST 函数给出的错误是(对于两个调用):

Error in curl::curl_fetch_memory(url, handle = handle) : 
SSL peer certificate or SSH remote key was not OK

getURL函数给出的错误是(没有config(cainfo=cafile)):

* Hostname was NOT found in DNS cache
* Trying 162.xxx.xxx.xxx...
* connect to 162.xxx.xxx.xxx port 443 failed: Connection refused
* Trying 130.yyy.yyy.yyy...
* Connected to example.com (130.yyy.yyy.yyy) port 443 (#0)
* found 175 certificates in /etc/ssl/certs/ca-certificates.crt
* gnutls_handshake() warning: The server name sent was not recognized
* failed to get server cert
* Closing connection 0
Error in function (type, msg, asError = TRUE) :
gnutls_handshake() warning: The server name sent was not recognized

我怀疑这与运行后的 R 有关:

curl 'https://example.com/query/getData.php'

从命令行返回预期的结果。

服务器是带有 COMODO SSL 证书的 apache2 服务器。在 /etc/apache2/sites-enabled/000-default.conf 中,服务器名称设置为

ServerName www.example.com  

任何帮助将不胜感激

最佳答案

httr 包包含它自己的 CA 包,所以这可能不是问题所在。更有可能是服务器端 SNI 配置问题或您的证书有问题

很遗憾,您没有发布带有实际 URL 的可重现示例。但是使用最新版本的新 openssl 包,您可以轻松调试您的服务器证书:

library(openssl)
cert <- download_ssl_cert("www.r-project.org")
print(cert)
print(as.list(cert[[1]]))

也尝试验证它

cert_verify(cert, ca_bundle())

这可能会提示您的证书有什么问题。

关于r - 在 R 中使用 httr 通过 SSL 获取网站内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33913916/

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