首页 > 解决方案 > 使用 httr 发布请求

问题描述

我是新手httr。我正在尝试使用此地理编码 API:https ://geo.api.gouv.fr/adresse 。我想直接从 R 传递一个 csv 文件,如他们的示例中所示:

curl -X POST -F data=@search.csv -F columns=adresse -F columns=postcode https://api-adresse.data.gouv.fr/search/csv

示例 csv 在这里:https ://adresse.data.gouv.fr/exemples/search.csv

我试过了,没有指定列:

library(httr)
test <- POST("https://api-adresse.data.gouv.fr/search/csv/", 
      body = "data = @search.csv")

> test
Response [https://api-adresse.data.gouv.fr/search/csv/]
  Date: 2021-02-09 21:27
  Status: 400
  Content-Type: application/json; charset=utf-8
  Size: 66 B

或者

test <- POST("https://api-adresse.data.gouv.fr/search/csv/", 
     body = "data = @search.csv",
     content_type("application/json"))

但我仍然获得 400 状态。指定整个文件路径也不起作用。这是如何运作的 ?我想获取 json,并在 R 中阅读它提前谢谢!

标签: rcurlhttr

解决方案


我不确定您是否可以请求取回 json,但您可以通过以下方式执行此操作httr

library(httr)

r <- POST(url = "https://api-adresse.data.gouv.fr/search/csv",
          body = list(data = upload_file("search.csv"), 
                      columns = "adresse", 
                      columns = "postcode"))
content(r)

# # A tibble: 4 x 20
#   nom   adresse postcode city  latitude longitude result_label result_score result_type result_id
#   <chr> <chr>      <dbl> <chr>    <dbl>     <dbl> <chr>               <dbl> <chr>       <chr>    
# 1 Écol~ 6 Rue ~    54600 Vill~     48.7      6.15 6 Rue Alber~         0.96 housenumber 54578_00~
# 2 Écol~ 6 Rue ~    54500 Vand~     48.7      6.15 6 Rue d’Aqu~         0.96 housenumber 54547_00~
# 3 Écol~ 31 Rue~    54180 Heil~     48.6      6.21 31 Rue d’Ar~         0.96 housenumber 54257_00~
# 4 Écol~ 1 bis ~    54250 Cham~     48.7      6.16 1 bis Rue d~         0.95 housenumber 54115_01~
# # ... with 10 more variables: result_housenumber <chr>, result_name <chr>, result_street <lgl>,
# #   result_postcode <dbl>, result_city <chr>, result_context <chr>, result_citycode <dbl>,
# #   result_oldcitycode <lgl>, result_oldcity <lgl>, result_district <lgl>

推荐阅读