Curl Post In Excel For Mac

Posted on

I hope I’m not alone on this but I find the cURL documentation hard to follow and short on examples. My goal was to mimic some HTTP XML posting traffic a server gets from IoT devices. (or ) reproduction is very easy and will send. TL;DR.

  1. Curl Post In Excel For Macro
  2. Install Curl On Mac

ensure you have an empty -header 'Content-Type:' header: this ensures that cURL doesn’t add one and does not mess on how the content is being transferred. use the -data or -data-binary command with an @ to post a file as body. if you want -write-out then be sure you have a recent cURL version. This is how the IoT or Postman will send. Post headers like these: Host:127.0.0.1:8080 Content-Length: 245 Connection:Keep-Alive. Content like this: The data is being streamed to the HTTP server even with the very limited set of headers. I’ve been unable to come up with exact cURL statement that exactly matches the headers and way the content is being transferred.

Curl Post In Excel For Macro

This is what I tried (in all examples,%1 is the IPv4 address of the HTTP 1.1 server):. POST with the all the headers and the command: curl -request POST -header 'Host:%1:8080' -header 'Content-Length: 245' -header 'Connection: Keep-Alive' -data @httpPostSample.xml This will hang the connection: somehow cURL will never notify the upload is done and the HTTP server keeps waiting. When you put or -trace-ascii - on the command-line you will see something like this before hanging:. upload completely sent off: 245 out of 245 bytes. Note the trick to emit the ASCII trace to using with the minus sign: thanks to for answering. You can do the same with which dumps all characters (not only ASCII) including their HEX representation. POST with the all but the Content-Length headers and the -data command: curl -request POST -header 'Host:%1:8080' -header 'Connection: Keep-Alive' -data @httpPostSample.xml This will automatically add a Content-Length: 245 header and complete the transfer.

But it will also add a Content-Type: application/x-www-form-urlencoded header causing the content not being posted as a body. POST with a -form file= command: curl -request POST -header 'Host:%1:8080' -header 'Connection: Keep-Alive' -form file=@httpPostSample.xml This will automatically ad a Content-Length: xxx header (way longer than 245) because it converts the request into a Content-Type: multipart/form-data; boundary=-e1c0d47bac806954 one (the hex at the end differs) which is totally unlike what Postman does. It is also unlike to what the HTTP server accepts. POST with the all but the Content-Length headers and the or command: curl -request POST -header 'Host:%1:8080' -header 'Connection: Keep-Alive' -data-binary @httpPostSample.xml curl –request POST –header “Host:%1:8080” –header “Connection: Keep-Alive” –data-binary @httpPostSample.xml It turns out that -data-ascii is exactly the same as -data and that -data-binary just skips some new-line conversion when compared to -data or -data-ascii. Contrary to the documentation that suggest it is equivalent to -data-binary it seems -data-raw behaves exactly like -data and -data-ascii. So these are all stuck with the Content-Type: application/x-www-form-urlencoded and I thought I was running out of options. Then I found had posted an answer at mentioning to add a Content-Type header.

So I changed the request to include the -header 'Content-Type: text/xml; charset=UTF-8' header:. curl -request POST -header 'Content-Type: text/xml; charset=UTF-8' -header 'Host:%1:8080' -header 'Connection: Keep-Alive' -data @httpPostSample.xml This works. But: the Content-Type header is not present in the original request.

Finally it occurred to me: What if cURL would not insert a Content-Type header if I add an empty Content-Type header?. curl -request POST -header 'Content-Type:' -header 'Host:%1:8080' -header 'Connection: Keep-Alive' -data @httpPostSample.xml It posts exactly the same content as the IoT devices and Postman do. I tried to combine this with the (a.k.a.w) option, but for older versions of cURL (I could reproduce with 7.34) that forces cURL back in to Content-Type: application/x-www-form-urlencoded mode so watch your cURL version!

Install Curl On Mac

Curl Post In Excel For Mac

Later I will put more research in chuncked transfer. Links that might help me:. –jeroen Some of the references:.

As an example, POSTing to a web server with the -v argument: curl -v -d 'firstname=john&lastname=doe' And the output POST /post HTTP/1.1 User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3 Host: testserver.com Accept:./. Content-Length: 28 Content-Type: application/x-www-form-urlencoded. The closest I got without using tcpdump is using the -trace-ascii option: curl -d 'hello=there' -trace-ascii /dev/stdout Info: About to connect to w3.org port 80 (#0) Info: Trying 128.30.52.45.