web-dev-qa-db-fra.com

CURL escape single quote

Comment puis-je faire fonctionner cela?

curl -XPOST 'http://localhost:9290/location/place' -d '{"geoloc": {"lat": "38.1899", "lon": "-76.5087"}, "longitude": "-76.5087", "admin_name1": "Maryland", "admin_name2": "St. Mary's", "admin_name3": "", "postal_code": "20692", "admin_code3": "", "country_code": "US", "admin_code1": "MD", "latitude": "38.1899", "admin_code2": "037", "accuracy": null, "place_name": "Valley Lee"}'

Le ' dans Mary's est à l'origine de cet échec. Je l'exécute à partir d'un fichier comme cat curl-cmd.txt | sh mais cela ne fonctionnera pas non plus depuis la ligne de commande. J'ai essayé d'utiliser \' et \\' et \u0027 (l'unicode ')

Je suis coincé

24
mikeb

J'ai eu le même problème. La solution la plus simple consiste à échapper à l'apostrophe avec une barre oblique inversée en plus de l'encapsuler dans un ensemble de guillemets simples. '\''

Pour votre cas d'utilisation, modifiez Mary's à Mary'\''s et ça devrait marcher.

curl -XPOST 'http://localhost:9290/location/place' -d '{"geoloc": {"lat": "38.1899", "lon": "-76.5087"}, "longitude": "-76.5087", "admin_name1": "Maryland", "admin_name2": "St. Mary'\''s", "admin_name3": "", "postal_code": "20692", "admin_code3": "", "country_code": "US", "admin_code1": "MD", "latitude": "38.1899", "admin_code2": "037", "accuracy": null, "place_name": "Valley Lee"}'

Une autre approche consiste à encapsuler les données POST (-d) entre guillemets doubles tout en échappant à toutes les occurrences imbriquées de guillemets doubles dans la chaîne JSON avec une barre oblique inverse.

curl -XPOST 'http://localhost:9290/location/place' -d "{\"geoloc\": {\"lat\": \"38.1899\", \"lon\": \"-76.5087\"}, \"longitude\": \"-76.5087\", \"admin_name1\": \"Maryland\", \"admin_name2\": \"St. Mary's\", \"admin_name3\": \"\", \"postal_code\": \"20692\", \"admin_code3\": \"\", \"country_code\": \"US\", \"admin_code1\": \"MD\", \"latitude\": \"38.1899\", \"admin_code2\": \"037\", \"accuracy\": null, \"place_name\": \"Valley Lee\"}"
57
Travis Clarke