Curl -d против --data-binary - PullRequest
       8

Curl -d против --data-binary

0 голосов
/ 15 ноября 2018

Используя это [https://github.com/prometheus/pushgateway][1], мы пытаемся подтолкнуть одну метрику к прометею. Похоже, данные требуются в очень специфическом формате.

Он отлично работает, когда делает их пример скручивания

echo "some_metric 3.14" | curl --data-binary @- http://pushgateway.example.org:9091/metrics/job/some_job

Тем не менее выполнение скручивания с параметром -d завершается неудачно, поскольку отсутствует конец строки / файла

curl -d 'some_metric 3.15\n' http://pushgateway.example.org:9091/metrics/job/some_job

Я пытаюсь понять разницу в поведении, так как считаю, что обе они выполняют команды POST, и мне нужно реплицировать этот параметр --data-binary в node.js с помощью метода "request.post", но мне кажется, что может копировать опцию curl -d, которая не работает.

Есть ли какие-либо предложения относительно подсказок о том, в чем разница между -d и --data-binary, и о том, как сделать эквивалент --data-binary из node.js?

1 Ответ

0 голосов
/ 15 ноября 2018

Со страницы man curl:

- data-ascii

(HTTP) Это просто псевдоним для -d, --data.

- двоичный файл данных

(HTTP). Публикация данных выполняется в точности так, как указано, без дополнительной обработки.

Если вы начнете данные сбуква @, остальное должно быть именем файла.Данные отправляются> аналогично -d, --data, за исключением того, что переводы строки и возврат каретки>> сохраняются, а преобразования никогда не выполняются.

Как -d, --data content по умолчанию-Тип, отправляемый на сервер: application / x-www-form->> urlencoded.Если вы хотите, чтобы данные обрабатывались сервером как произвольные двоичные данные>, задайте для типа содержимого значение octet-stream: -H "Content-Type: application / octet-stream".

Если этот параметриспользуется несколько раз, последующие за первым будут добавлять данные, как> описано в -d, --data.

Использование @- заставит curl прочитать имя файла из stdin .

Итак, в основном в первом варианте вы отправляете двоичный файл с именем "some_metric 3.14".Во втором случае вы отправляете строку ascii "some_metric 3.15 \ n".

Если вы хотите, чтобы curl обрезал новые строки перед отправкой, используйте - data-ascii или -d опция:

echo "some_metric 3.14" | curl -d @- http://pushgateway.example.org:9091/metrics/job/some_job

...