2011-11-08 51 views
10

我設置了一個簡單的新的應用程序與模型條目,使用腳手架屬性titlecontent將JSON數據發送到簡單的應用程序與捲曲

現在我正在嘗試使用curl POST POST JSON數據(而不是使用瀏覽器)。

以下似乎工作(即成功發佈以空數據):

curl --verbose --header "Accept: application/json" --header "Content-type: application/json" --request POST --data "" http://localhost:3000/entries 

下不起作用:

curl --verbose --header "Accept: application/json" --header "Content-type: application/json" --request POST --data "{'content':'I belong to AAA','title':'AAA'}" http://localhost:3000/entries 

我已經嘗試了許多變化。我得到的錯誤大多是主機未找到或JSON數據的意外標記。

回答

6

沿着什麼喬納森說去,Post現在將數據發送到EntriesController。現在在您的create行動中,您必須從params散列中獲取數據。我會假設你正在做它的railsy方式,所以你會做這樣的事情:

curl -d 'entry[content]=I belong to AAA' -d entry[title]=AAA http://localhost:3000/entries' 

在你的控制器

Entry.create(params[:entry]) 

此說抓住從params哈希表的「入口」數據(由rails爲您創建)並將其作爲參數傳遞給Entry以初始化新對象。 「創建」將在一個方法調用中爲您做「新建」和「保存」。

+0

問題解決。非常感謝。喬納森確實讓我們開始了正確的軌道。謝謝。 – delta2006

2

我跑了測試,並得到了錯誤MultiJson::DecodeError (743: unexpected token at '{'content':'I belong to AAA','title':'AAA'}'):

JSON需要鑰匙和字符串,而不是單引號雙引號。嘗試--data '{"content":"I belong to AAA","title":"AAA"}'

+0

謝謝,但即使您的建議仍然會出現743錯誤。我想知道,如果應用程序不期望或喜歡這個json數據,我試圖發佈。它是一個由rails創建的簡單rails應用程序,模型由rails生成腳手架。 – delta2006

+0

實際上,這個解決方案假定你想在請求的主體中傳遞JSON,這與瀏覽器的發佈數據不同。要模仿瀏覽器,只需使用'curl -d'content =我屬於AAA'-d title = AAA http:// localhost:3000/entries' –

+0

開始POST「/ entries」for 127.0.0.1 at 2011-11- 09 07:46:48 -0500 處理由EntriesController#create as */* 參數:{「content」=>「我屬於AAA」,「title」=>「AAA」} ←[1m←[35mSQL (0.0ms)←[0m INSERT INTO「entries」(「content」,「created_at」,「tit le」,「updated_at」)VALUES(?,?,?,?)[[「content」,nil], [「created_at」,Wed,0 9 Nov 2011 12:46:48 UTC +00:00],[「title」,nil],[「updated_at」,Wed,09 Nov 2011 12:46:48 UTC + 00:00]] 重定向到http:// localhost:3000/entries/46 已完成302在0ms中找到 – delta2006

0

採取JSON

{\"a\":\"this_is_a\"} 

塊和URL編碼它

%7B%22a%22%3A%22this_is_a%22 

,然後使用curl張貼

curl -i --data "working_params=%7B%22a%22%3A%22this_is_a%22" http://url/accepts/json 
+0

你可以顯示「url encode part」嗎? –

+0

探索的時間。試試:http://meyerweb.com/eric/tools/dencoder/讓你開始。 – sorens

+0

$$$$$$$$謝謝! –