使用httr2请求加拿大统计局API返回406错误的原因及解决方法
解决加拿大统计局API请求406错误的问题
问题原因分析
HTTP 406 Not Acceptable错误的核心原因有两点:
- 请求的
Accept头部设置为*/*,虽然理论上表示接受所有格式,但加拿大统计局的API要求**明确指定Accept: application/json**才能正常响应 - API的
vectorId参数要求为数组类型,即使只查询单个ID,也需要用数组包裹,而你当前传入的是单个数值,不符合参数格式要求
修改后的请求代码
req <- request("https://www150.statcan.gc.ca/t1/wds/rest/getDataFromVectorsAndLatestNPeriods") resp <- req |> req_method("POST") |> req_headers(Accept = "application/json") |> # 添加明确的Accept头部 req_body_json( list( vectorId = c(41690973), # 将单个ID改为数组格式 latestN = 10 ) ) |> req_perform()
逻辑说明
加拿大统计局的专用包(如cansim)内部会自动处理这些细节:设置符合要求的请求头、将参数格式化为API预期的数组类型,所以能正常返回数据。上述修改对齐了专用包的请求逻辑,应该可以解决406错误。
内容的提问来源于stack exchange,提问作者Spingelhoff
相关产品推荐
相关产品推荐

