debrah
debrah

Reputation: 65

R translating curl commands to post multipart form - problem

I have the following curl command that, when run from command line, works perfectly:

curl -X POST -u "myusername|[email protected]:myPassword"
     -H "Content-Type: multipart/form-data"
     --form [email protected]
     https://mysite-data.herokuapp.com/api/mymarket/setups/uploads

[Apologies: this is not a working example as I cannot provide the real url and credentials. I am hoping you can help me with the translation from curl to httr without running the example yourselves.]

Here's my attempt to translate the above to the language of R's httr, which did NOT work:

library(httr)
POST("https://mysite-data.herokuapp.com/api/mymarket/setups/uploads",
     config = authenticate("myusername|[email protected]", "myPassword"),
     body = upload_file("MyFileForUploading.csv", type = "text/csv"),
     encode = "multipart")

The curl command serves to upload a csv file being used as setup for a web-based trading interface. Setup includes things like trader initial holdings of objects, trader permissions (to buy and sell), etc. All this is simply stored as a csv file (columns = setup parameters; rows = traders).

Can anyone see an obvious mis-translation? I am very ignorant about both curl and httr. My translation is based on learning from examples and I wouldn't be surprised if there's an obvious failure, for example, with the content-type part of the command.

Thanks!

Upvotes: 1

Views: 239

Answers (1)

Jan Nielsen
Jan Nielsen

Reputation: 11799

You're really close. This works with environment values setup in "~/Renviron":

library("httr")

post_url <- Sys.getenv("POST_URL")
username <- Sys.getenv("USERNAME")
password <- Sys.getenv("PASSWORD")
csv_file <- Sys.getenv("CSV_FILE")

POST(
  url = post_url,
  config = authenticate(username, password),
  body = list(file = upload_file(csv_file)),
  encode = "multipart",
  verbose()
) -> response

The key is the file = as you used in your CURL command.

Upvotes: 1

Related Questions