You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用httr2发送请求:含嵌套JSON的请求体触发HTTP 400错误

排查Google Maps Places API新版Text Search中locationBias参数导致的HTTP 400错误

出现这个问题的核心原因几乎都是locationBias参数的格式或传递方式不符合API要求,下面是具体的排查方向和解决方法:

1. 错误传递嵌套List而非JSON字符串

httr2的req_body_form()默认会将List类型参数拆分为多键值对(比如把list(circle=list(center=...))解析成locationBias[circle][center][latitude]=37.7749这类格式),但Google Places API要求locationBias是完整的JSON字符串,而非拆解后的表单字段。

错误示例:

# 直接传嵌套List会导致参数格式混乱
req <- request("https://places.googleapis.com/v1/places:searchText") %>%
  req_auth_bearer_token("YOUR_API_KEY") %>%
  req_body_form(
    query = "coffee shops",
    locationBias = list(circle = list(center = list(latitude = 37.7749, longitude = -122.4194), radius = 1000))
  )

正确写法:

用jsonlite::toJSON()把嵌套结构转为标准JSON字符串,注意开启auto_unbox = TRUE避免多余的数组括号:

library(jsonlite)

# 生成符合要求的locationBias JSON字符串
location_bias <- toJSON(
  list(circle = list(center = list(latitude = 37.7749, longitude = -122.4194), radius = 1000)),
  auto_unbox = TRUE
)

req <- request("https://places.googleapis.com/v1/places:searchText") %>%
  req_auth_bearer_token("YOUR_API_KEY") %>%
  req_body_form(
    query = "coffee shops",
    locationBias = location_bias
  )

2. 请求内容类型与参数格式不匹配

新版Places API的Text Search支持两种请求体格式:

  • application/x-www-form-urlencoded(即req_body_form()):此时locationBias必须是JSON字符串
  • application/json(即req_body_json()):此时locationBias直接传嵌套List,但整个请求体是JSON结构

如果混用两种格式(比如用req_body_json()但参数结构错误),也会触发400错误。

正确的JSON请求体写法(可选):

req <- request("https://places.googleapis.com/v1/places:searchText") %>%
  req_auth_bearer_token("YOUR_API_KEY") %>%
  req_body_json(
    list(
      query = "coffee shops",
      locationBias = list(circle = list(center = list(latitude = 37.7749, longitude = -122.4194), radius = 1000))
    )
  )

3. 参数结构或拼写错误

检查locationBias的结构是否严格符合API要求:

  • 拼写是否正确:是locationBias(驼峰式,B大写),不是locationbias或其他变体
  • circle结构必须包含:center(含latitude和longitude数字字段)、radius(数字,单位米)
  • 不要出现多余字段,比如把longitude写成long这类拼写错误

4. 排查工具:查看实际请求内容

用httr2的req_dry_run()打印出发送的请求详情,对比官方示例确认参数是否正确:

req_dry_run(req)

重点检查locationBias的格式是否和官方curl示例一致(官方示例中locationBias是完整的JSON字符串,无额外转义)。

内容的提问来源于stack exchange,提问作者trevi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 03:57:53