Hello,
I need to send a .csv file to an API using a POST request. How can I do this using the <session> tag in the protocol? You can see below the CURL example:
curl -X POST https://[ip addrs]/api/v1/catalogs/imports?clean_catalog=1 -H "accept: application/json" -H "Content-Type: multipart/form-data" -F csv=@file.csv;type=text/csv
Thanks in advance.
Hi Maximiliano,
This would be done by setting the Request verb to POST, configure the url and headers accordingly, and configure a Data element to point at a parameter that can be set with the content of your csv file:
Implementing HTTP communication | DataMiner Docs
As to getting the file content into the data parameter, there is the read file action (read file | DataMiner Docs) that should be executed before the session is executed, or you use a QAction if the data needs to be altered first.
Hi Floris,
I tried this code, but does not work
I read the csv file and set it in the parameter 400.
Maybe I'm forgetting something.
This is the CURL
curl -X POST https://[address]/api/v1/catalogs/imports?clean_catalog=1 -H "accept: application/json" -H "Content-Type: multipart/form-data" -F csv=@file.csv;type=text/csv
Thanks in advance
Hi Maximiliano, I’ve been out of the office until now, I’ll recreate your scenarios today and see where there are still differences that we can correct for in the protocol xml.
Hi,
I’ve made an example on github: https://github.com/FlorisCO/Dojo-HttpPostCsv/blob/RC/protocol.xml
A few remarks:
– I dropped the Authorization header because I was testing without any security
– I changed the Content-Type to text/csv in session 400. It allows me to send a csv body, rather than a file.
– However, if your endpoint does expect this to be sent as a file, using multipart doesn’t automatically add the necessary encapsulation in DataMiner. If you set a header like this, you need to add the boundary in the header and body of the POST. For this, I made a second session with id 450.
– The Response Header element is intended to capture the value provided in the response, it requires the pid attribute to be configured.
Does this fix the communication with your endpoint?
I replied below, I can’t add code here