Каков правильный разделитель строк для публикации нескольких измерений на influenxDB через WinHttpRequest? - PullRequest
1 голос
/ 08 октября 2019

Я хочу опубликовать несколько строк (измерений) временных рядов в InfluxDB с точностью в секундах (точность = s) через VBA и библиотеку WinHttp.

Когда публикуется одно измерение, все работает нормально, и измерениеможно найти в базе данных.

При публикации нескольких строк с \ n в качестве разделителя (как указано в документе: ссылка результат с сервера "не удается проанализировать".

Строка для одной строки выглядит следующим образом и может быть легко вставлена ​​в db: "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

Ошибка, которую я получаю при публикации нескольких измерений:

"{" error ":" невозможно разобрать "значение d_1_deals = 0 1554336000 \\ nd_1_deals значение = 0 1554336900 \\ n ': bad timestamp "}"

Мне кажется, проблема в том, что особенно "\ n" неправильно закодировано в "\\ n".

Я пробовал разные разделители иподходит, но .send-метод продолжает посылать «\\ n», который не распознается API как новая строка.

Есть идеи, как изменить это поведение? Как я могу изменить разделитель или поведение Encoding для того, чтобы заставить effxDb-API распознавать разделитель строки?

1 Ответ

0 голосов
/ 08 октября 2019

\n - это специальный символ C для обозначения маркера строки при записи строк в исходном коде. Компилятор C заменяет его фактическим символом маркера строки, 0x0D.

. В Windows это часто переводится в I / O в 0x0D0A, возврат каретки + перевод строки.

InВ Visual Basic вы должны использовать Chr(10) (0x0A) и Chr(13) (0X0D).

Возможно, вам придется поэкспериментировать, хочет ли база данных только возврат каретки или также перевод строки.

Итак, строка, которую вы написали, станет:

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= ..."

Правильный / рабочий способ:

params = "d_1_deals value=0 1554336000" & Chr(10) & "d_1_deals value= ..."
...