当服务器没有 SSL 证书时,如何使用来自可公开访问的 API 的 HTTP 请求(返回 JSON 数据)在 R 中导入数据

问题描述 投票:0回答:1

我希望有人可以帮助我解决我在数据收集方面遇到的问题。

背景

美国集群测绘项目构建了一个 API,以提供对开发人员友好的公共访问,以访问美国集群测绘网站上精心策划且不断更新的数据存档。该 API 可使用 HTTP 请求公开访问并返回 JSON 数据。 API 的基本 URL 为:http://clustermap.us/data

然后您可以通过添加 /TypeOfRegion/RegionID 来缩小数据的特殊性。以下是特定县的 JSON 数据示例。例如:https://clusterapping.us/data/region/county/48321

我想将他们的数据导入到 R 中。

注意:但是该服务器(USCMP 网站)无法证明它是 clustermapping.us;它的安全证书已于 87 天前过期。

这似乎阻止我在 R 中导入数据。

我使用以下代码尝试将数据导入到 R 中。

我首先尝试:

lnk <- readLines('https://clustermapping.us/data/region/county/48321')
jsonlite::fromJSON(sprintf('[%s]', gsub('}{', '},{', lnk, fixed = TRUE)))

总是返回以下错误

Error in file(con, "r") : 
  cannot open the connection to 'https://clustermapping.us/data/region/county/48321'
In addition: Warning message:
In file(con, "r") :
  URL 'https://clustermapping.us/data/region/county/48321': status was 'SSL connect error'

然后我尝试了:

base_url <- "http://clustermapping.us/data/region/county/48321"
response <- GET(base_url, config = list(ssl_verifypeer = FALSE, ssl_verifyhost= FALSE ))

总是返回以下错误

Error in curl::curl_fetch_memory(url, handle = handle) : 
  schannel: next InitializeSecurityContext failed: SEC_E_CERT_EXPIRED (0x80090328) - The received certificate has expired.

我添加了“ssl_verifypeer = FALSE,ssl_verifyhost= FALSE”,因为由于与网站关联的 SSL 证书已过期,我不断收到此错误消息,这导致 HTTPS 请求失败。根据我的了解,添加此内容应该允许我使用 HTTP 而不是 HTTPS 发出请求。然而,这并没有什么区别。

我不确定如何继续。非常感谢您对我如何解决这个问题的意见。

附注在这方面我还是个初学者。

r json api ssl-certificate httprequest
1个回答
0
投票

您想使用

config()
函数来传递这些值。您的通话应如下所示:

base_url <- "https://clustermapping.us/data/region/county/48321"
response <- GET(base_url, config(ssl_verifyhost=0, ssl_verifypeer=0))

注意我们如何传入

config()
函数的结果,而不是传递带有值列表的
config=
参数。

© www.soinside.com 2019 - 2024. All rights reserved.