【问题标题】:Pass array in query params httr在查询参数 httr 中传递数组
【发布时间】:2022-07-07 02:36:20
【问题描述】:

如何将数组传递给 httr 的查询? 请求 URL 应如下所示: https://www.example.com/xyz?type=3&type=5

我当前的代码如下所示:

POST(url,
query = data.frame("something" = "somethingElse", type = ),
add_headers(.headers = c("token" = token),
encode = "json")

如何将这些类型从 url 示例添加到我的 R 示例中?

【问题讨论】:

    标签: r httr


    【解决方案1】:

    httr 的默认编码不喜欢多次使用相同的名称,但可以将您的值分隔到具有重复名称的列表中。这是我用过的一个辅助函数,可以提供帮助

    flattenbody <- function(x) {
      # A form/query can only have one value per name, so take
      # any values that contain vectors length >1 and
      # split them up
      # list(x=1:2, y="a") becomes list(x=1, x=2, y="a")
      if (all(lengths(x)<=1)) return(x);
      do.call("c", mapply(function(name, val) {
        if (length(val)==1 || any(c("form_file", "form_data") %in% class(val))) {
          x <- list(val)
          names(x) <- name
          x
        } else {
          x <- as.list(val)
          names(x) <- rep(name, length(val))
          x
        }
      }, names(x), x, USE.NAMES = FALSE, SIMPLIFY = FALSE))
    }
    

    然后你可以用它来使用类似的东西

    POST(url,
      query = flattenbody(list(something="somethingElse", type = c(3, 5))),
      add_headers(.headers = c("token" = token)),
      encode = "json"
    )
    

    【讨论】:

    • 如果我必须提供我在上面示例中定义的附加查询参数,那将不起作用。它被转换成 type = 3 & type.1 = 5
    • 现在知道了,将所有附加参数添加到 flattenbody 的列表中即可,谢谢
    猜你喜欢
    • 2021-11-27
    • 2020-10-20
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    相关资源
    最近更新 更多