Comment les caractères d'échappement dans le cadre d'un JSON requête POST avec CURL?

Donc, je suis en train d'utiliser un service appelé Cachet de la poste pour envoyer un e-mail au format HTML. Ils ont une documentation de l'API ici, et ils donnent cet exemple sur la façon d'utiliser CURL:

$: curl -X POST "http://api.postmarkapp.com/email" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Postmark-Server-Token: ed742D75-5a45-49b6-a0a1-5b9ec3dc9e5d" \
-v \
-d "{From: '[email protected]', To: '[email protected]', Subject: 'Postmark test', HtmlBody: '<html><body><strong>Hello</strong> dear Postmark user.</body></html>'}"

Donc, c'est tout bon et fonctionne très bien lorsque j'utilise mon propre jeton. Le problème est que lorsque j'ajoute mon propre corps html. Si j'envoie un message simple, il fonctionne très bien. Dès que j'ai ajouter certains caractères spéciaux, il se casse. Par exemple, si je fais quelque chose comme ceci:

-d "{From: '[email protected]', To: '[email protected]', Subject: 'Postmark test', HtmlBody: '<!DOCTYPE html><html><body><strong>Hello</strong> dear Postmark user.</body></html>'}"

Il se casse à cause de la !. Comment puis-je résoudre ce problème?


Mise à JOUR: Comme sourcejedi souligné, je suis en cours d'exécution depuis le shell (bash), de sorte que le ! question fait sens pour moi maintenant. J'ai déplacé la chaîne JSON dans un fichier séparé appelé e-mail.json et chargé à l'aide de -d @email.json. Cela a fonctionné pour un simple e-mail avec <!DOCTYPE>, mais je suis encore en train d'erreur suivant lorsque j'essaie de charger la totalité du code HTML:

{"ErrorCode":402,"Message":"Received invalid JSON input."}

Je crois que cela a à faire avec certains autres caractères spéciaux. Je reçois la même erreur lorsque j'utilise --data-urlencode @email.json.