I just spent the last hour trying to figure out how to send base64 encoded data that lives in a file using curl. Everyone says to just use
--data-binary but that assumes you know what the binary format should actually be! Every combination I tried of
--crlf kept failing with server-side errors.
The trick for me was making sure that the file itself was manually URL encoded. So all newlines were replaced with
%0a and all plus signs were replaced with
%2b. Then just put everything on one line. So my file (which was a SAML payload for testing) looked like:
+ \n SAMLResponse=PZXhXN0iSxR3Lklvbd3dlGjpNaW5hdGlWWxbj0wb20aYyb25zZSB%2bi5jFYWRpdHwMv0vZ28v%0acG5zZT4=
This can just be sent using the normal
--data parameter as a file:
curl -XPOST --data @saml.txt http://www.example.net/
2 thoughts on “curl with base64 encoded data”
Thanks for sharing this way. I was struggeling while POSTing data with special chars (#;?$&) using a script (cygwin).
I thougt about “sending the data as base64-encoded string” and found this site. I was thinking to do something like ” –data ‘[base64-encoded-content]’ ” but the webserver did not undetstand my data (was not decoding the base64 to plain text).
So I did “your trick” to save the data in a separate file and POSTed it with ” –data @plaintextfile.txt ” … it worked.
Thanks again for sharin your way!
Using ‘–data-ascii’ with -H ‘Content-Type: text/plain’ worked for me.