Search code examples
multipartform-dataworkato

Workato - Hash containing an array when sent in a multipart form request is considered as a file


I am trying to send an array as value for a hash key in a POST multipart request.

input = {"attribute"=> ["Countries:India", "Category:Can"]}
post("url")
.request_format_multipart_form.payload(input)

This works when using Ruby's HTTP and also POSTMAN. I can also see the differences between how Postman and Workato handles the form data.

Postman:

----------------------------428750340837882951989223
Content-Disposition: form-data; name="attribute"
Category:Test
----------------------------428750340837882951989223
Content-Disposition: form-data; name="attribute"
Countries:India
----------------------------428750340837882951989223--

Workato:

------RubyFormBoundaryhokO7A27Xb6cdSEz
Content-Disposition: form-data; name="attribute"; filename="attribute"
Content-Type: Category:Can

Countries:India
------RubyFormBoundaryhokO7A27Xb6cdSEz--

Why does Workato consider an array as a file? or am I wrong with the call?


Solution

  • I solved this by changing the request type to application/x-www-form-urlencoded and encode the input parameters as form data in the body (Using encode_www_form).

    input = {"attribute"=> ["Countries:India", "Category:Can"]}
    input = input.encode_www_form
    post("url",input)
    .request_format_www_form_urlencoded