In order to execute curl commands to endpoints with passwords that contain special characters, the cleanest way that I have found to do so is to Base64 encode the authentication string for curl and then pass an Authorization request header along with the request.
In this example the credentials are uid ‘rchapin’ and passwd ‘abc123!@#’. Normally we would pass this to curl as follows:
$ curl -u rchapin:abc123!@# -X GET https://some-endpoint:443
However, this will not work and the password will need to be sent in some other fashion other than ASCII.
Following are the steps to pass the credentials as Base64:
1. Using your favorite Base64 encoder, generate and ASCII string of the entire ‘username:password’ string that you would normally pass with the -u option for curl
rchapin:abc123!@# converted = cmNoYXBpbjphYmMxMjMhQCM=
2. Now modify the curl command as follows:
$ curl -H "Authorization: Basic cmNoYXBpbjphYmMxMjMhQCM=" -X GET https://some-endpoint:443