httr POST 请求 API 返回 400 错误

2023-12-10

我正在使用 R 中的 httr 包来尝试查询 postcode.io API (http://postcodes.io/docs).

我可以按照说明成功查询单个邮政编码:sample4 <- GET("api.postcodes.io/postcodes/EN14RF")

当我尝试查询多个邮政编码时,我变得有点困惑。 postcode.io 说明建议

POST https://api.postcodes.io/postcodes?q=[postcode]

其中指定了包含邮政编码数组的 JSON 对象。我有一个包含邮政编码的 R 向量,我尝试将其转换为 JSON 对象,如下所示:

a <- toJSON(a)

我的 R 向量 'a' 是:

structure(c(4L, 5L, 3L, 6L, 1L, 2L), .Label = c("Bn14 9aw", "CR0 4BE", "E5 8HB", "EN1 4RF", "G42 8QN", "SA1 3UL"), class = "factor")

现在,当我尝试使用以下代码行查询 API 时:

sample4 <- POST("https://api.postcodes.io/postcodes?q=[postcode]", body = list(postcode = add1JSON))

我收到错误:"Invalid JSON submitted. You need to submit a JSON object with an array of postcodes or geolocation objects"

我有一种感觉,这是因为我没有提供数组,而是提供未命名的列表,例如我的 JSON 对象应该如下所示:

{"postcodes":"[ \"EN14RF\", \"G428QN\", \"E58HB\", \"SA13UL\", \"Bn149aw\", \"CR04BE\" ]"}

不是这个:"[ \"EN14RF\", \"G428QN\", \"E58HB\", \"SA13UL\", \"Bn149aw\", \"CR04BE\" ]"

谁能帮我这个?我有一种感觉,这与我的toJSON调用,但在论坛或 API 开发人员页面上找不到类似的示例:(

非常感谢

Marty


他们的 API 文档写得非常糟糕。这似乎是这个特定 API 调用的目的:

library(httr)
library(jsonlite)
library(dplyr)

post_codes <- c("Bn14 9aw", "CR0 4BE", "E5 8HB", "EN1 4RF", "G42 8QN", "SA1 3UL")

res <- POST("https://api.postcodes.io/postcodes",
            body=list(postcodes=post_codes),
            encode="json")


status_code(res)
## [1] 200

content(res, as="text") %>%
  fromJSON(flatten=TRUE) %>%
  glimpse()
## List of 2
##  $ status: int 200
##  $ result:'data.frame':  6 obs. of  29 variables:
##   ..$ query                            : chr [1:6] "Bn14 9aw" "E5 8HB" "CR0 4BE" "EN1 4RF" ...
##   ..$ result.postcode                  : chr [1:6] "BN14 9AW" "E5 8HB" "CR0 4BE" "EN1 4RF" ...
##   ..$ result.quality                   : int [1:6] 1 1 1 1 1 1
##   ..$ result.eastings                  : int [1:6] 514948 534934 531978 534957 264583 258092
##   ..$ result.northings                 : int [1:6] 104386 185332 164963 199610 192273 662417
##   ..$ result.country                   : chr [1:6] "England" "England" "England" "England" ...
##   ..$ result.nhs_ha                    : chr [1:6] "South East Coast" "London" "London" "London" ...
##   ..$ result.longitude                 : num [1:6] -0.3693 -0.0553 -0.1055 -0.0494 -3.9572 ...
##   ..$ result.latitude                  : num [1:6] 50.8 51.6 51.4 51.7 51.6 ...
##   ..$ result.parliamentary_constituency: chr [1:6] "East Worthing and Shoreham" "Hackney South and Shoreditch" "Croydon South" "Enfield North" ...
##   ..$ result.european_electoral_region : chr [1:6] "South East" "London" "London" "London" ...
##   ..$ result.primary_care_trust        : chr [1:6] "West Sussex" "City and Hackney Teaching" "Croydon" "Enfield" ...
##   ..$ result.region                    : chr [1:6] "South East" "London" "London" "London" ...
##   ..$ result.lsoa                      : chr [1:6] "Worthing 008C" "Hackney 017B" "Croydon 024D" "Enfield 002E" ...
##   ..$ result.msoa                      : chr [1:6] "Worthing 008" "Hackney 017" "Croydon 024" "Enfield 002" ...
##   ..$ result.incode                    : chr [1:6] "9AW" "8HB" "4BE" "4RF" ...
##   ..$ result.outcode                   : chr [1:6] "BN14" "E5" "CR0" "EN1" ...
##   ..$ result.admin_district            : chr [1:6] "Worthing" "Hackney" "Croydon" "Enfield" ...
##   ..$ result.parish                    : chr [1:6] "Worthing, unparished area" "Hackney, unparished area" "Croydon, unparished area" "Enfield, unparished area" ...
##   ..$ result.admin_county              : chr [1:6] "West Sussex" NA NA NA ...
##   ..$ result.admin_ward                : chr [1:6] "Gaisford" "Homerton" "Waddon" "Turkey Street" ...
##   ..$ result.ccg                       : chr [1:6] NA "NHS City and Hackney" "NHS Croydon" "NHS Enfield" ...
##   ..$ result.nuts                      : chr [1:6] "West Sussex (South West)" "Hackney and Newham" "Croydon" "Enfield" ...
##   ..$ result.codes.admin_district      : chr [1:6] "E07000229" "E09000012" "E09000008" "E09000010" ...
##   ..$ result.codes.admin_county        : chr [1:6] "E10000032" "E99999999" "E99999999" "E99999999" ...
##   ..$ result.codes.admin_ward          : chr [1:6] "E05007698" "E05009376" "E05000167" "E05000211" ...
##   ..$ result.codes.parish              : chr [1:6] "E43000150" "E43000202" "E43000198" "E43000200" ...
##   ..$ result.codes.ccg                 : chr [1:6] "E38000213" "E38000035" "E38000040" "E38000057" ...
##   ..$ result.codes.nuts                : chr [1:6] "UKJ27" "UKI41" "UKI62" "UKI54" ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

httr POST 请求 API 返回 400 错误 的相关文章

  • 如何在 Flutter 中解码 Gzip Http 响应?

    我是颤振新手 我正在发出网络请求 并且得到了正确的响应 但数据已被压缩 我已经在 Swift 中解压了相同的内容 但是对于 Flutter 我无法做到这一点 有人可以帮忙吗 这是我尝试过的 import dart convert impor
  • PagedList 的 Newtonsoft.Json 序列化不包含某些属性

    我正在尝试序列化 PagedList 对象 https github com martijnboland MvcPaging blob master src MvcPaging PagedList cs https github com m
  • 计算级别内的值

    我在 R 中生成了一组级别cut 例如假设 0 到 1 之间的小数值 分为 0 1 个区间 gt frac lt cut c 0 1 breaks 10 gt levels frac 1 0 001 0 1 0 1 0 2 0 2 0 3
  • 来自 data.frame 每一列的随机样本

    我想从 a 的每一行中抽取随机样本data frame独立于其他行 这是一个例子 此代码为每行选择相同的列 但我需要为每行独立选择列 library plyr set seed 12345 df1 lt mdply data frame m
  • 根据值的运行总计创建组

    我的数据在一个变量 Y 上是唯一的 另一个变量 Z 告诉我每个 Y 中有多少人 我的问题是我想从这些 Y 和 Z 创建 45 人的组 我的意思是 每当运行总计Z 达到 45 创建一组 然后代码继续创建下一组 我的数据看起来像这样 ID X
  • 如何修改新 PostgreSQL JSON 数据类型中的字段?

    使用 postgresql 9 3 我可以SELECTJSON 数据类型的特定字段 但如何使用来修改它们UPDATE 我在 postgresql 文档或网上的任何地方都找不到任何这样的示例 我已经尝试过显而易见的方法 postgres cr
  • 如何从 data.frame 中选择行和列的子集

    我有这个 d d Age gt 2 它返回 Age 超过 2 的所有行 但我只想返回几列中的值 例如 d X 和 d Y 而不是全部 无论如何我可以做到这一点吗 Thanks d d Age gt 2 c X Y
  • 在 Java 中处理视频(DVD、.avi .mkv)

    在寻找了一个像样的 Java 视频播放库之后 我发现了问题 周围的每个人都在尖叫不要使用 JMF 因为它已经过时 过时并且需要用户安装它 其他替代方案 例如 VLCJ 如果可以工作的话似乎不错 但仍然相对不稳定并且依赖大量本机代码 并且至于
  • 在 Shiny 中使用 readlines(prompt = )

    我有一个代码 使用以下方式获取输入readlines prompt 功能 您能告诉我 Shiny 中的哪个输入函数足以将此代码适应 Shiny 应用程序吗 我需要一个交互功能 我无法使用简单的输入selectInput 因为我有很多read
  • 将 Php 数组编码为 json [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想对我的 php 数组进行编码 A
  • 在Java Servlet中获取通过jquery ajax发送的参数[重复]

    这个问题在这里已经有答案了 我在网上搜索这个主题 但找不到有效的示例 我会很高兴有人能给我帮助 这就是我测试的 ajax url GetJson type POST dataType json contentType application
  • 使用启用了两步身份验证的 python 脚本从 nextcloud 下载文件

    我设置了一个 nextcloud 实例 我想使用 python 脚本从那里下载文件 我的 nextcloud 实例对所有用户强制执行两步身份验证 我希望它保持这种状态 我梦想的场景是使用requests库 因此请按照此处的文档进行操作htt
  • R - 根据另一个数据框查找每组的重叠日期

    我有一个数据框 其中包含多个雨量计的降雨测量值 如下例所示 gt rnfl ID date value 1 250 2000 03 01 5 37 2 250 2000 03 02 0 00 3 250 2000 03 03 2 94 4
  • 最小有效 JSON 是多少?

    我仔细阅读了 JSON 描述http json org http json org 但我不确定我是否知道这个简单问题的答案 最小可能的有效 JSON 字符串是什么 string 该字符串是有效的 JSON 吗 42简单的数字是有效的 JSO
  • 如何对数组的数组进行 JSON_MODIFY?

    我的结构看起来像这样 Declare layout NVARCHAR MAX N Sections SectionName Section1 SectionOrder 1 Renders RenderName Render1 RenderO
  • 使用 JSONP 时出现“无效标签”?

    我的 JSONP 请求有问题 数据不会显示 Firebug 显示 无效标签 错误 我的 JavaScript ajax url link dataType jsonp beforeSend function xhr var base64 b
  • mclapply 用户时间大于已用时间

    我正在尝试使用mclapply的功能parallel封装在R 该函数通过计算对数似然距离将值分配给序列矩阵 这是一个 CPU 密集型操作 所结果的system time价值观令人困惑 gt system time mclapply work
  • 解释 survreg 中的威布尔参数

    我正在尝试使用从 R 中的 survreg 估计的参数生成逆威布尔分布 我的意思是 对于给定的概率 这将是在 MS Excel 中实现的小型模拟模型中的随机数 返回使用我的参数预计出现故障 的时间 我理解逆威布尔分布的一般形式是 X b l
  • 使用 catch all 字典属性将 json 序列化为对象

    我想使用 JSON net 反序列化为对象 但将未映射的属性放入字典属性中 是否可以 例如给定 json one 1 two 2 three 3 和 C 类 public class Mapped public int One get se
  • 使用 SparkR 1.5 从 RStudio 中的 hdfs 读取大文件(纯文本、xml、json、csv)的选项

    我是 Spark 新手 想知道除了下面的选项之外是否还有其他选项可以使用 SparkR 从 RStudio 读取存储在 hdfs 中的数据 或者我是否正确使用它们 数据可以是任何类型 纯文本 csv json xml 或任何包含关系表的数据

随机推荐