httr对API的POST请求返回400错误

编程入门 行业动态 更新时间:2024-10-09 09:16:30
本文介绍了httr对API的POST请求返回400错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

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

I'm working with the httr package in R in an attempt to query the postcode.io API (postcodes.io/docs).

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

I can successfully query a single postcode as per the instructions using: sample4 <- GET("api.postcodes.io/postcodes/EN14RF")

当我尝试查询多个邮政编码时,我变得有些不知所措. postcode.io说明建议

When I try and query multiple postcodes I'm becoming a little unstuck. The postcode.io instructions suggest

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

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

where a JSON object containing an array of postcodes is specified. I have an R vector containing postcodes which I have attempted to convert to a JSON object as such with:

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时:

Now when I try and query the API with the following line of code:

sample4 <- POST("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对象应如下所示:

I have a feeling this is because I am not providing an array but an unnamed list e.g. my JSON object should look like this:

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

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

有人可以帮我吗?我感觉这与我的toJSON调用有关,但是无法在论坛或API开发人员页面上找到类似的示例:(

Can anyone help me with this? I've a feeling it is something to do with my toJSON call, but have been unable to find a similar example on the forum or on the API developers page:(

非常感谢

马蒂

推荐答案

他们的API文档编写得很差.这似乎是此特定API调用的目的:

They have very poorly written API docs. This seems to be the intent of this particular API call:

library(httr) library(jsonlite) library(dplyr) post_codes <- c("Bn14 9aw", "CR0 4BE", "E5 8HB", "EN1 4RF", "G42 8QN", "SA1 3UL") res <- POST("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" ...

更多推荐

httr对API的POST请求返回400错误

本文发布于:2023-10-12 05:15:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1483819.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:错误   API   httr   POST

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!