2013-05-17 12 views
25

Zastanawiasz się, w jaki sposób mogę wysłać polecenie curla z opcją -d określającą plik z jego ścieżką, a nie plik w bieżącym katalogu.Wysyłanie plików json w żądaniach curl ze ścieżkami bezwzględnymi lub względnymi

To jest to, co otrzymuję, gdy próbuję przetestować moją aplikację z plikiem json w lokalnym reż. Zarówno aplikacja i ja jesteśmy zadowoleni:

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 

To co mi chodzi, kiedy określić plik JSON, który znajduje się w innym katalogu

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 

nie widzę nic w manualu dla curl do określania katalogów dla plików przekazywanych jako dane. Czy jestem niestety ograniczony do plików w katalogu lokalnym lub czy istnieje specjalny sposób określania plików w różnych katalogach? Z góry dziękuje za twoją pomoc.

Odpowiedz

43

Opcja komendy -d @ akceptuje dowolną ścieżkę do pliku rozpoznawalnego, o ile ścieżka rzeczywiście istnieje. Więc można używać:

  • ścieżkę względną do katalogu bieżącego
  • pełną ścieżkę
  • ścieżka z soft-linków w nim
  • i tak dalej

dowcip , tak samo jak setki innych poleceń * w stylu Nix. Jedna szybka uwaga, opcja -d podejmie próbę zakodowania danych, co z tego, co opisujesz, nie jest w rzeczywistości tym, czego potrzebujesz. Zamiast tego należy użyć opcji --data-binary. Coś takiego:

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 
+0

dzięki za odpowiedź i udzielenie odpowiedzi. stawianie względnej lub absolutnej ścieżki nie działa, a ścieżka istnieje. jakiej wersji curl używałeś podczas uruchamiania swojego cmd? moje jest curl 7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5. Jestem prawie na krawędzi dowcipu, próbując zrozumieć, co się dzieje b/c, o czym napisałeś powyżej, jest to, co zrobiłem, ale to nie działa. – Classified

+0

curl 7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5 – Perception

+0

czy może to być spowodowane różnicą w wersji curl? ścieżka do pliku json jest poprawna. jednak dla mnie, gdy używam ścieżki w cmd curl, to nie działa. jeśli uruchamiam curl cmd, a plik jest w lokalnym katalogu, to działa. – Classified

Powiązane problemy