Je me demande juste comment envoyer une commande curl avec l'option -d spécifiant un fichier avec son chemin et non un fichier dans le répertoire courant.
C'est ce que j'obtiens lorsque j'essaie de tester mon application avec le fichier json dans le répertoire local. L'application et moi-même sommes heureux:
curl -XPOST -H 'Content-Type:application/json' -d @all_fields.json http://testcomp.lab.net:8080/stats -v -s
* About to connect() to testcomp.lab.net port 8080
* Trying 10.93.2.197... connected
* Connected to testcomp.lab.net (10.93.2.197) port 8080
> POST /stats HTTP/1.1
> User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Host: testcomp.lab.net:8080
> Accept: */*
> Content-Type:application/json
> Content-Length: 2882
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
HTTP/1.1 200 OK
< Content-Length: 0
* Connection #0 to Host testcomp.lab.net left intact
* Closing connection #0
C'est ce que j'obtiens quand je spécifie un fichier json qui se trouve dans un autre répertoire
curl -XPOST -H 'Content-Type:application/json' -d @json/all_fields.json http://testcomp.lab.net:8080/stats -v -s
"Invalid json for Java type interface Java.util.List"
Warning: Couldn't read data from file "json/all_fields.json", this makes an
Warning: empty POST.
<snip snip>
<snip snip>
< HTTP/1.1 400 Bad Request
< Content-Type: application/json
< Transfer-Encoding: chunked
* Connection #0 to Host testcomp.lab.net left intact
* Closing connection #0
Je n'ai rien vu dans la page de manuel de curl pour spécifier les répertoires des fichiers transmis en tant que données. Suis-je malheureusement limité aux fichiers du répertoire local ou existe-t-il un moyen spécial de spécifier des fichiers dans différents répertoires? Merci d'avance pour votre aide.
L'option de commande -d @
Accepte tout chemin de fichier résoluble, tant que le chemin existe réellement. Vous pouvez donc utiliser:
À savoir, tout comme des centaines d'autres commandes de style * Nix. Une note rapide, l'option -d
Tentera de coder vos données par URL, qui d'après ce que vous décrivez n'est pas réellement ce que vous voulez. Vous devez plutôt utiliser l'option --data-binary
. Quelque chose comme ça:
curl -XPOST
-H 'Content-Type:application/json'
-H 'Accept: application/json'
--data-binary @/full/path/to/test.json
http://localhost:8080/easy/eservices/echo -v -s