2013-05-17 240 views
25

想知道如何使用-d選項發送一個curl命令,用它的路徑指定文件而不是當前目錄中的文件。以絕對路徑或相對路徑發送curl請求中的json文件

這是當我嘗試使用本地目錄中的json文件測試我的應用程序時得到的結果。無論是應用程序和我很高興:

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 

這是我收到的時候我指定一個JSON文件,該文件在其他目錄

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 

我沒有看到該男子頁何事curl指定作爲數據傳入的文件的目錄。我不幸地僅限於本地目錄中的文件,或者是否有一種特殊的方式來指定不同目錄中的文件?在此先感謝您的幫助。

回答

43

-d @命令選項接受任何可解析的文件路徑,只要該路徑實際存在即可。所以,你可以使用:

  • 相對於當前目錄
  • 一個完全合格的路徑
  • 在它的軟鏈接

要機智路徑的路徑,就像數百個其他* Nix風格的命令一樣。一個簡單的說明,-d選項將嘗試對您的數據進行網址編碼,這從您所描述的內容實際上並不是您想要的。您應該使用--data-binary選項。類似這樣的:

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

感謝您的回覆和回答。把相對或絕對路徑不起作用,路徑確實存在。當您運行cmd時,您使用的是什麼版本的捲曲? mine curl 7.24.0(x86_64-apple-darwin12.0)libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5。我幾乎在機智的最後試圖弄清楚什麼是B/C你上面寫的是我做了什麼,但它不工作。 – Classified

+0

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

+0

這可能是由curl版本的差異造成的嗎? json文件的路徑是有效的。但是,對於我來說,當我在curl cmd中使用路徑時,它不起作用。如果我運行curl cmd並且該文件位於本地目錄中,那麼它可以工作。 – Classified