Как перевести эту команду curl в вызов R curl? - PullRequest
0 голосов
/ 20 июня 2019

У меня есть команда curl, которую я могу вызвать в bash

curl -X POST -H 'Content-Type: text/csv' --data-binary @data/data.csv https://some.url.com/invocations > data/churn_scored.jsonl

, который отправляет файл CSV на конечную точку API, и я перенаправляю результаты в файл .jsonl.

Так что я не могу найти, где я могу указать файл данных для POST к конечной точке, как при использовании curl's @.

Как можно получить сообщение CURL с помощью пакета curl R (или любого другого пакета)? Перенаправление вывода я могу выяснить по-другому.

Ответы [ 2 ]

2 голосов
/ 20 июня 2019

Это очень полезный сайт для преобразования команд curl на другие языки: https://curl.trillworks.com/#r

Когда я включил вашу команду curl, я получил это.

require(httr)

headers = c(
  `Content-Type` = 'text/csv'
)

data = upload_file('data/data.csv')
res <- httr::POST(url = 'https://some.url.com/invocations', httr::add_headers(.headers=headers), body = data)
1 голос
/ 20 июня 2019

К конкретному символу @. От man curl:

--data-binary <data>
  (HTTP) This posts data exactly as specified with no extra processing whatsoever.
  If you start the data with the letter @, the rest should be a filename.  Data is
  posted in a similar manner as --data-ascii does, except that newlines are preserved
  and conversions are never done.

  If this option is used several times, the ones following the first will append data
  as described in -d, --data.

Кажется, не о чем беспокоиться @

Как уже упоминалось @ chinsoon12, httr - хороший хороший метод для обработки запроса:

  • -X или --request переводит в VERB функцию POST(), которая включает --data-binary
  • -H или --header переводится в add_headers(), но есть специальные функции для настройки типа контента (см. Ниже)

Так это выглядит так:

library(httr)
response <- POST(
      url = "https://some.url.com/invocations",
      body = upload_file(
        path =  path.expand("data/data.csv"),
        type = 'text/csv'),
      verbose()
    )
# get response and write to you disk
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...