httr POST 错误:“数字文字中的字符‘-’无效”

问题描述 投票:0回答:2

我是 Influx 和 R 的新手,我正在尝试在 R Studio 中查询来自 InfluxDB 1.8.4(启用 Flux)的数据。我不知道我的代码出了什么问题:

dburl <- "http://localhost:8086/api/v2/query"

influxquery <- sprintf(
  'from(bucket: "plcview/autogen")
    |> range(start: 2017-06-27T04:16:58.278Z, stop: now())
    |> filter(fn: (r) => r._measurement == "MONITORING")
    |> map(fn:(r) => ({ r with _time: uint(v:r._time) }))'
)

httr::POST(url=dburl,
           add_headers('Content-Type: application/vnd.flux',
                       'Accept: application/csv',
                       'Accept-Encoding: application/gzip'),
           body=list(q=influxquery))

我试图得到的数据看起来像这样:

time                     MONITORING equipmentNumber workplace
----                     ---------- --------------- ---------
2017-06-27T02:16:58.599Z 1          L4212M1017      3
2017-06-27T02:16:58.6Z   1          L4212M1017      4
2017-06-27T02:16:58.6Z   1          L4212M1017      1
2017-06-27T02:16:58.6Z   1          L4212M1017      2
2017-06-27T02:17:03.14Z  0          L4212M1017      1
2017-06-27T02:17:03.14Z  0          L4212M1017      2
2017-06-27T02:17:03.14Z  0          L4212M1017      4
2017-06-27T02:17:20.007Z 1          L4212M1017      1
2017-06-27T02:17:36.988Z 1          L4212M1017      4
2017-06-27T02:17:36.988Z 1          L4212M1017      2

我总是收到此错误消息

Response [http://localhost:8086/api/v2/query]
  Date: 2021-04-08 14:19
  Status: 400
  Content-Type: application/json
  Size: 53 B
{"error":"invalid character '-' in numeric literal"}

我可以使用 Postman 推送相同的请求(使用所有这些参数)。为什么它在 R 中不起作用? R 存储数据的方式可能有问题吗?我认为这可能是 rfc339 格式的时间序列数据的时间戳(其中用“-”分隔日期。

有什么想法吗?谢谢你们!

r influxdb httr influxdb-2 flux-influxdb
2个回答
0
投票

由于我以原始文本形式发送数据库查询,但

httr::POST
函数中没有相应的参数,因此您需要添加
content_type()
参数。这确保了查询可以被理解。它在 POST 请求正文中指定接下来要发生的内容。

这是我的代码:

my_raw_result <- httr::POST(url=dburl,
                            add_headers('Content-Type: application/vnd.flux',
                                        'Accept: application/csv',
                                        'Accept-Encoding: gzip'),
                            content_type("application/vnd.flux"),
                            body=influxquery)

您也不必将

q
添加为请求正文中
influxquery
的键。仅当您尝试使用 InfluxQL 而不是 Flux 从 InfluxDB v1x 查询数据时才会出现这种情况


0
投票

由于未正确传递标头而出现相同的错误(根本没有标头)。这是 influxDB 服务器响应。因此,无论使用哪种语言发送数据,您都会收到此错误。

© www.soinside.com 2019 - 2024. All rights reserved.