web-dev-qa-db-fra.com

Pourquoi est-ce que j'obtiens un JSON mal formé dans le corps de la demande dans cet appel cURL?

J'ai essayé d'appeler l'API CloudFlare v4, en utilisant un exemple fourni dans leur propre documentation.

C'est le code de l'exemple

curl -X PUT "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records/372e67954025e0ba6aaa6d586b9e0b59" \ -H "X-Auth-Email: [email protected]" \ -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \ -H "Content-Type: application/json" \ --data '{"id":"372e67954025e0ba6aaa6d586b9e0b59","type":"A","name":"example.com","content":"1.2.3.4","proxiable":true,"proxied":false,"ttl":120,"locked":false,"zone_id":"023e105f4ecef8ad9ca31a8372d0c353","zone_name":"example.com","created_on":"2014-01-01T05:20:00.12345Z","modified_on":"2014-01-01T05:20:00.12345Z","data":{}}'

Qui peut également être trouvé à Mettre à jour les enregistrements DNS

À l'aide de Windows cmd.exe pour exécuter cette commande, je dois d'abord la créer sur une seule ligne, j'ai donc supprimé le "\" et le reformaté (deux fois) en m'assurant de n'avoir modifié aucune partie du processus.

C'est le même code sur une seule ligne:

curl -X PUT "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records/372e67954025e0ba6aaa6d586b9e0b59" -H "X-Auth-Email: [email protected]" -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" -H "Content-Type: application/json" --data '{"id":"372e67954025e0ba6aaa6d586b9e0b59","type":"A","name":"example.com","content":"1.2.3.4","proxiable":true,"proxied":false,"ttl":120,"locked":false,"zone_id":"023e105f4ecef8ad9ca31a8372d0c353","zone_name":"example.com","created_on":"2014-01-01T05:20:00.12345Z","modified_on":"2014-01-01T05:20:00.12345Z","data":{}}'

Lorsque j'exécute ce single-liner en cmd, cela fonctionne mais j'obtiens un JSON malformé dans le corps de la demande, cependant, une vérification visuelle, un formatage sur notepad ++ et une exécution via le validateur JSON sont tous positifs, ce JSON (copié à partir de la documentation CloudFlare ) n'est pas mal formé.

Message d'erreur

{"success":false,"errors":[{"code":6007,"message":"Malformed JSON in request body"}],"messages":[],"result":null}

Googler ce message d'erreur ou le code d'erreur ne me donne rien et cette même commande fonctionne sur un PC sous Linux de mon patron.

Quelqu'un peut-il me dire s'il s'agit d'un bogue connu, si le JSON est vraiment mal formé ou si quelque chose d'autre me vient à l'esprit?

Je vous remercie

10
Frank.Lowell

Frank.Lowell, merci pour la question!

J'ai trouvé la réponse dans le billet de blog: "Attendre de trouver un JSON valide dans le corps de la demande ..." curl pour Windows .

Par exemple, pour Purger tout--data la valeur sera:

# On Linux
--data '{"purge_everything":true}'

# On Windows
--data "{\"purge_everything\":true}"

Pour les fenêtres:

  1. Remplacez les guillemets simples par des guillemets doubles: '-->"
  2. Échappez aux guillemets doubles avec une barre oblique inverse: "-->\"
18
Veaceslav Doina