J'ai une série de données à entrer dans la base de données. L'interface utilisateur permettant de saisir les données ne convient pas à la saisie en bloc. Je tente donc de formuler un équivalent en ligne de commande. Lorsque j'examine la requête réseau de l'interface utilisateur en chrome, je vois une requête PUT d'un objet JSON. Quand j'essaie de répliquer la demande
curl -H 'Accept: application/json' -X PUT '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service`
Je reçois une erreur
curl: (3) [globbing] accolades imbriquées non prises en charge en pos X
Où X est la position du caractère du premier "[".
Comment puis-je mettre un objet JSON qui comprend un tableau?
Votre ligne de commande devrait avoir un -d/- data inséré avant la chaîne que vous voulez envoyer dans le PUT, et vous voulez définir le type de contenu et non accepter.
curl -H 'Content-Type: application/json' -X PUT -d '[JSON]' http://example.com/service
En utilisant les données JSON exactes de la question, la ligne de commande complète deviendrait:
curl -H 'Content-Type: application/json' -X PUT \
-d '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' \
http://example.com/service
Bien que le message d'origine contienne d'autres problèmes (c'est-à-dire le "-d" manquant), le message d'erreur est plus générique.
curl: (3) [globbing] accolades imbriquées non prises en charge en pos X
Cela est dû au fait que les accolades {} et les crochets [] sont des caractères spéciaux globaux dans curl . Pour désactiver cette fonctionnalité, utilisez l'option " -g ".
Par exemple, la requête de la facette Solr suivante échouera sans que le "-g" désactive le bouclage :
curl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'
Il convient de mentionner que l’entête Accept
informe le serveur de ce que nous acceptons en retour, alors que l’entête pertinent dans ce contexte est Content-Type
Il est souvent conseillé de spécifier Content-Type
en tant que application/json
lors de l'envoi de JSON. Pour curl, la syntaxe est la suivante:
-H 'Content-Type: application/json'
La commande curl complète sera donc:
curl -H 'Content-Type: application/json' -H 'Accept: application/json' -X PUT -d '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service`
Essayez d’utiliser un guillemet simple au lieu de guillemets doubles avec - g
Le scénario suivant a fonctionné pour moi
curl -g -d '{"collection":[{"NumberOfParcels":1,"Weight":1,"Length":1,"Width":1,"Height":1}]}" -H "Accept: application/json" -H "Content-Type: application/json" --user [email protected]:123456 -X POST https://yoururl.com
AVEC
curl -g -d "{'collection':[{'NumberOfParcels':1,'Weight':1,'Length':1,'Width':1,'Height':1}]}" -H "Accept: application/json" -H "Content-Type: application/json" --user [email protected]:123456 -X POST https://yoururl.com
Ceci en particulier résolu mon erreur erreur de commande curl: mauvais côlon est le premier caractère
La seule chose qui a aidé est d’utiliser un fichier JSON au lieu d’un corps de texte json. Basé sur Comment envoyer le contenu d'un fichier en tant qu'entité body à l'aide de cURL