post 通过 WinHttpRequest 对 influxDB 进行多次测量的正确行分隔符是什么?
What is the correct line delimiter to post multiple measurements to influxDB via WinHttpRequest?
我想 post 通过 VBA 和 WinHttp 库将时间序列的多行(测量)以秒为单位精确到 InfluxDB(精度=s)。
当 posted 一个测量值时,一切正常,并且可以在数据库中找到测量值。
当 post 以 \n 作为分隔符(如文档中指定:a link 来自服务器的结果是 "unable to parse"。
一行的字符串看起来像这样,可以很容易地插入到数据库中:"d_1_deals value=0 1554336000"
多行的字符串如下所示:"d_1_deals value=0 1554336000\nd_1_deals value=0 1554336900\nd_1_deals value=0 1554337800d_1_deals value=0 1554338700"
我正在使用 "WinHttp.WinHttpRequest.5.1" 对象和 post 方法。
完整代码如下所示:
Function post_fp_information_to_influx()
sURL = "http://xx.xxx.xx.250:80/write?"
db_string = "db=xxxxxTEST&precision=s"
resulturl_post = sURL & db_string
params = "d_1_deals value=0 1554336000\nd_1_deals value=0 1554336900\nd_1_deals value=0 1554337800d_1_deals value=0 1554338700"
sResult = GetHTTPResult(resulturl_post, "POST", params)
…
End Function
Function GetHTTPResult(sURL As String, Post_GET As String, params As String) As String
Dim XMLHTTP As Variant, sResult As String
Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
XMLHTTP.Open Post_GET, sURL, False
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
XMLHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
XMLHTTP.send (params)
sResult = XMLHTTP.ResponseText
Set XMLHTTP = Nothing
GetHTTPResult = sResult
End Function
多次测量 posted 时我得到的错误:
"{"error":"unable to parse 'd_1_deals value=0 1554336000\nd_1_deals value=0 1554336900\n': bad timestamp"}"
我认为问题是特别是“\n”被错误编码为“\\n”。
我尝试了不同的分隔符和方法,但 .send 方法一直在发送“\\n”,API.
无法将其识别为新行
有什么想法可以改变这种行为吗?如何更改定界符或编码行为以使 influxDb-API 识别行定界符?
\n
是一个C语言特殊字符,用来表示在源代码中写字符串时的行标记。 C 编译器将其替换为实际的行标记字符 0x0D
.
在 Windows 这通常被翻译成 I/O 到 0x0D0A
,回车 Return + 换行。
在 Visual Basic 中,您必须使用 Chr(10)
(0x0A
) 和 Chr(13)
(0X0D
)。
您可能需要试验数据库是只需要回车 return 还是需要换行。
所以你写的字符串会变成:
params = "d_1_deals value=0 1554336000" & Chr(13) & "d_1_deals value= ..."
或
params = "d_1_deals value=0 1554336000" & Chr(13) & Chr(10) & "d_1_deals value= ..."
Correct/working方式:
params = "d_1_deals value=0 1554336000" & Chr(10) & "d_1_deals value= ..."
我有类似的错误。在我的例子中,它是由卷曲引起的:
--data @file.txt
应该是
--data-binary @file.txt
我想 post 通过 VBA 和 WinHttp 库将时间序列的多行(测量)以秒为单位精确到 InfluxDB(精度=s)。
当 posted 一个测量值时,一切正常,并且可以在数据库中找到测量值。
当 post 以 \n 作为分隔符(如文档中指定:a link 来自服务器的结果是 "unable to parse"。
一行的字符串看起来像这样,可以很容易地插入到数据库中:"d_1_deals value=0 1554336000"
多行的字符串如下所示:"d_1_deals value=0 1554336000\nd_1_deals value=0 1554336900\nd_1_deals value=0 1554337800d_1_deals value=0 1554338700"
我正在使用 "WinHttp.WinHttpRequest.5.1" 对象和 post 方法。 完整代码如下所示:
Function post_fp_information_to_influx()
sURL = "http://xx.xxx.xx.250:80/write?"
db_string = "db=xxxxxTEST&precision=s"
resulturl_post = sURL & db_string
params = "d_1_deals value=0 1554336000\nd_1_deals value=0 1554336900\nd_1_deals value=0 1554337800d_1_deals value=0 1554338700"
sResult = GetHTTPResult(resulturl_post, "POST", params)
…
End Function
Function GetHTTPResult(sURL As String, Post_GET As String, params As String) As String
Dim XMLHTTP As Variant, sResult As String
Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
XMLHTTP.Open Post_GET, sURL, False
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
XMLHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
XMLHTTP.send (params)
sResult = XMLHTTP.ResponseText
Set XMLHTTP = Nothing
GetHTTPResult = sResult
End Function
多次测量 posted 时我得到的错误:
"{"error":"unable to parse 'd_1_deals value=0 1554336000\nd_1_deals value=0 1554336900\n': bad timestamp"}"
我认为问题是特别是“\n”被错误编码为“\\n”。
我尝试了不同的分隔符和方法,但 .send 方法一直在发送“\\n”,API.
无法将其识别为新行有什么想法可以改变这种行为吗?如何更改定界符或编码行为以使 influxDb-API 识别行定界符?
\n
是一个C语言特殊字符,用来表示在源代码中写字符串时的行标记。 C 编译器将其替换为实际的行标记字符 0x0D
.
在 Windows 这通常被翻译成 I/O 到 0x0D0A
,回车 Return + 换行。
在 Visual Basic 中,您必须使用 Chr(10)
(0x0A
) 和 Chr(13)
(0X0D
)。
您可能需要试验数据库是只需要回车 return 还是需要换行。
所以你写的字符串会变成:
params = "d_1_deals value=0 1554336000" & Chr(13) & "d_1_deals value= ..."
或
params = "d_1_deals value=0 1554336000" & Chr(13) & Chr(10) & "d_1_deals value= ..."
Correct/working方式:
params = "d_1_deals value=0 1554336000" & Chr(10) & "d_1_deals value= ..."
我有类似的错误。在我的例子中,它是由卷曲引起的:
--data @file.txt
应该是
--data-binary @file.txt