为什么我向加拿大统计局 API 发出的请求 (HTTR2) 返回 406 错误?我该如何解决此问题?

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

我想从加拿大统计局 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.

我错过了什么吗?

我已经尝试了一些针对加拿大统计局的软件包,他们能够得到正确的响应,所以我认为我这边一定存在一些格式问题...

r post http-status-code-406 httr2
1个回答
0
投票

在他们的请求示例中他们发送一个带有单个对象的数组:

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"
© www.soinside.com 2019 - 2024. All rights reserved.