Suite

Utilisez l'API REST de GeoServer sur les noms de fonctionnalités avec des caractères spéciaux

Utilisez l'API REST de GeoServer sur les noms de fonctionnalités avec des caractères spéciaux


Par défaut, GeoServer est préconfiguré avec quelques exemples d'espaces de travail, de banques de données et de couches. L'un de ces espaces de travail s'appelleit.geosolutions.

Si j'essaie de supprimer cet espace de travail viaboucleet l'API REST :

curl -v -u admin:geoserver -XDELETE http://localhost:8080/geoserver/rest/workspaces/it.geosolutions?recurse=true

, puis curl renvoie

HTTP/1.1 404 non trouvé

Cependant, si j'exécute la même commande sur un espace de travail qui ne contient pas de caractères spéciaux, comme le pré-configuréciterespace de travail :

curl -v -u admin:geoserver -XDELETE http://localhost:8080/geoserver/rest/workspaces/cite?recurse=true

, puis cUrl renvoie

HTTP/1.1 200 OK

Par conséquent, je suppose que le problème dans le premier cas est dû à la.au nom de l'espace de travail. Comment puis-je correctement échapper à ces caractères spéciaux dans l'URL ?


En tapant la question, j'ai trouvé comment le faire. Cependant, le partage est attentionné ;-) Peut-être que cela sera utile à quelqu'un d'autre un jour.

Pour échapper aux URL lors de l'utilisation de cUrl pour accéder à l'API REST GeoServer, les caractères spéciaux peuvent être remplacés par leurs codes ASCII respectifs, de sorte que l'exemple problématique ci-dessus devienne :

curl -v -u admin:geoserver -XDELETE http://localhost:8080/geoserver/rest/workspaces/it%2Egeosolutions?recurse=true

Notez que le.a été remplacé par%2E.


Au lieu de rechercher manuellement les codes ASCII, essayez de coder l'URL de la chaîne. Je ne connais pas grand-chose à Curl, mais j'ai trouvé quelques articles qui devraient aider toute autre personne ayant ce problème. Celui-ci traite d'Unix/Linux et celui-ci traite du shell bash.

Dans la plupart des langues, vous devriez pouvoir trouver un moyen d'encoder la chaîne en URL et de l'ajouter à votre URL. C'est beaucoup plus facile et reproductible que de rechercher manuellement des remplacements d'encodage.


Cette solution ne semble pas fonctionner dans GeoServer 2.16.2 :

$ curl -v -u admin:geoserver http://localhost:8080/geoserver/rest/workspaces/it%2Egeosolutions * Essayer 127.0.0.1… * Connecté au port localhost (127.0.0.1) 8080 (#0) * Auth du serveur en utilisant Basic avec l'utilisateur 'admin' > GET /geoserver/rest/workspaces/it%2Egeosolutions HTTP/1.1 > Host : localhost:8080 > Authorization : Basic YWRtaW46Z2Vvc2VydmVy > User-Agent : curl/7.47.0 > Accept : */* > < HTTP/1.1 404 < X-Frame-Options : SAMEORIGIN < Content-Type : text/plain < Transfer-Encoding : chunked < Date : Thu, 20 Feb 2020 23:11:10 GMT < * Connection #0 to host localhost left intact Aucun espace de travail de ce type : 'il' a été trouvé (géoserveur)