我想从加拿大统计局 API 获取数据。由于某种原因,我发送的所有请求似乎都返回 406 错误。我不完全确定我做错了什么。
我创建的请求如下:
req <- request("https://www150.statcan.gc.ca/t1/wds/rest/getDataFromVectorsAndLatestNPeriods")
resp <- req |>
req_method("POST") |>
req_body_json(
list(
vectorId = 41690973,
latestN = 10
)
) |>
req_perform()
试运行给了我以下结果:
POST /t1/wds/rest/getDataFromVectorsAndLatestNPeriods HTTP/1.1
Host: www150.statcan.gc.ca
User-Agent: httr2/1.0.1 r-curl/5.2.1 libcurl/7.81.0
Accept: */*
Accept-Encoding: deflate, gzip, br, zstd
Content-Type: application/json
Content-Length: 34
{"vectorId":41690973,"latestN":10}
我得到的错误:
Error in `req_perform()`:
! HTTP 406 Not Acceptable.
我错过了什么吗?
我已经尝试了一些针对加拿大统计局的软件包,他们能够得到正确的响应,所以我认为我这边一定存在一些格式问题...
在他们的请求示例中他们发送一个带有单个对象的数组:
POST URL:
https://www150.statcan.gc.ca/t1/wds/rest/getDataFromVectorsAndLatestNPeriods
POST BODY:
[{"vectorId":32164132, "latestN":3}]
您的请求略有不同,因为它仅发送对象:
req |>
req_method("POST") |>
req_body_json(list(vectorId = 41690973,latestN = 10)) |>
req_dry_run()
#> POST /t1/wds/rest/getDataFromVectorsAndLatestNPeriods HTTP/1.1
#> Host: www150.statcan.gc.ca
#> User-Agent: httr2/1.0.0 r-curl/5.2.1 libcurl/8.3.0
#> Accept: */*
#> Accept-Encoding: deflate, gzip
#> Content-Type: application/json
#> Content-Length: 34
#>
#> {"vectorId":41690973,"latestN":10}
尝试将您的有效负载嵌套在另一个
list()
中来解决此问题:
library(httr2)
req <- request("https://www150.statcan.gc.ca/t1/wds/rest/getDataFromVectorsAndLatestNPeriods")
resp <- req |>
req_method("POST") |>
req_body_json(
list(
list(
vectorId = 41690973,
latestN = 10
)
)
) |>
req_perform()
resp_status_desc(resp)
#> [1] "OK"