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 --data-ascii
and --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/