2013-05-17 34 views
25

Mi chiedo solo come posso inviare un comando di arricciatura con l'opzione -d che specifica un file con il suo percorso e non un file nella directory corrente.Invio di file json in richieste di arricciatura con percorsi assoluti o relativi

Questo è quello che sto ottenendo quando provo a testare la mia app con il file json nella directory locale. Sia l'applicazione e io sono felice:

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 

Questo è quello che sto ottenendo quando ho specificare un file JSON che è in un'altra directory

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 

io non ho visto niente nella pagina man di arricciare per specificare le directory per i file passati come dati. Sono sfortunatamente limitato ai file nella directory locale o esiste un modo speciale per specificare i file in diverse directory? Grazie in anticipo per il vostro aiuto.

risposta

43

L'opzione di comando -d @ accetta qualsiasi percorso di file risolvibile, purché il percorso sia effettivamente esistente. Così si potrebbe usare:

  • un percorso relativo alla directory corrente
  • un percorso completo
  • un percorso con soft-link in essa
  • e così via

Vale a dire , proprio come centinaia di altri comandi in stile * Nix. Una breve nota, l'opzione -d tenterà di codificare i tuoi dati, che da ciò che descrivi non è in realtà ciò che desideri. Dovresti invece usare l'opzione --data-binary. Qualcosa del genere:

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

grazie per rispondere e rispondere. mettere il percorso relativo o assoluto non funziona e il percorso esiste. quale versione curl hai usato quando hai eseguito il tuo cmd? il mio è arricciare 7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5. sono quasi alla fine cercando di capire cosa sta succedendo b/c quello che hai scritto sopra è quello che ho fatto ma non funziona. – Classified

+0

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

+0

potrebbe essere causato dalla differenza nella versione arricciata? il percorso del file JSON è valido. tuttavia, per me, quando uso il percorso nel curl cmd, non funziona. se eseguo il curl cmd e il file si trova nella directory locale, allora funziona. – Classified

Problemi correlati