Skip to main content
2 of 6
deleted 15 characters in body
user13892
  • 10.4k
  • 2
  • 16
  • 48

How to setup multipart HTTPRequest properly in Wolfram language?

I am trying to query the Tableau REST API using Wolfram. I have been able to send all the other types of HTTPRequest to it without issues but for some reason whenever the Body is multipart with mixed types separated by boundary I can't get it to work.

My request is as follows:

HTTPRequest[ $server<>"/api/3.22/sites/"<>$site<>"/workbooks?workbookType=twb&overwrite=true", <| "Method"->"POST", "Headers"-><|"X-Tableau-Auth"->$token,"Content-Type"->"multipart/mixed; boundary="<>$boundary,"Accept"->"application/json"|>, "Body"->StringRiffle[{ "--"<>$boundary, "Content-Disposition: name=\"request_payload\"", "Content-Type: text/xml", ExportString[XMLElement["tsRequest",{},{ XMLElement["workbook",{ "name"->$workbook, "showTabs"->"false", "description"->"This is a test workbook!" },{ XMLElement["views",{},{ XMLElement["view",{"name"->$view,"hidden"->"true"},{}] }], XMLElement["project",{"id"->$project},{}] }] }],"XML"], "--"<>$boundary, "Content-Disposition: name=\"tableau_workbook\"; filename=\""<>FileNameTake@$file<>"\"", "Content-Type: application/octet-stream", Import[$file,"Text"], "--"<>$boundary<>"--" }, "\n" ], "Expect"->"100-continue", "Content-Length"->ToString@StringLength@Import[$file,"Text"] |> ] 

I keep getting the error:

{"error":{"summary":"Bad Request","detail":"Payload is either \ malformed or incomplete (Could not parse multipart servlet request; \ nested exception is \ org.apache.commons.fileupload.FileUploadException: Header section has \ more than 10240 bytes (maybe it is not properly \ terminated))","code":"400000"}} 

Please help this is a critical piece that is breaking my workflow.

I am not sure how to send the content of the file, I assume this Import[$file,"Text"] is not right or Wolfram is messing up the multipart request somehow.

user13892
  • 10.4k
  • 2
  • 16
  • 48