Voici un exemple de ligne de commande qui correspond à cette description:
curl http://dumbdomain.com/solr/collection2/update/json -H 'Content-type:application/json' -d ' { "add": { "doc": { "uid": "79729", "text" : "I''ve got your number"} } }'
J'ai déjà essayé\'(non échappé), url encodé (non urldécodé à cette autre extrémité!) Et' '(citation disparaître!), Sans succès.
Si vous remplacez "par unicode encoded" (qui est\u0027), alors cela fonctionne:
curl http://dumbdomain.com/solr/collection2/update/json -H 'Content-type:application/json' -d ' { "add": { "doc": { "uid": "79729", "text" : "I\u0027ve got your number"} } }'
Étrange, mais vaut le détour!
Une solution de contournement habituelle dans de tels cas consiste à placer les données dans un fichier et à les publier.
$ cat post.json
{ "add": { "doc": { "uid": "79729", "text" : "I've got your number"} } }
Et puis invoquez:
curl -H "Content-type:application/json" --data @post.json http://dumbdomain.com/solr/collection2/update/json
Cela éviterait d'échapper à toute citation dans le json.
Dans le cas où vous utilisez Windows (ce problème ne se produit généralement pas sur * nix), vous pouvez diriger la sortie d'écho vers curl pour éviter tout échappement:
echo {"foo": "bar", "xyzzy": "fubar"} | curl -X POST -H "Content-Type: application/json" -d @- localhost:4444/api/foo
Voulez-vous dire comment faire passer correctement le JSON via la ligne de commande? Si vous utilisez Windows, vous devez faire attention à la façon dont vous échappez à votre chaîne. Cela fonctionne si vous utilisez des guillemets doubles autour de la chaîne de données entière, puis échappez aux guillemets doubles pour le JSON. Par exemple:
curl http://dumbdomain.com/solr/collection2/update/json -H 'Content-type:application/json' -d "{ \"add\": { \"doc\": { \"uid\": \"79729\", \"text\" : \"I've got your number\"} } }"