使用curl将JSON数据POST到简单的rails应用程序

时间:2011-11-08 02:24:41

标签: ruby-on-rails ruby json post curl

我使用模型条目设置了一个简单的新rails应用程序,其中属性titlecontent使用了scaffolding。

现在我正在尝试使用curl来发布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数据中未找到主机或意外令牌。

3 个答案:

答案 0 :(得分:6)

为了配合Jonathan所说的内容,Post现在将数据发送到EntriesController。现在,在您的create操作中,您必须从params哈希中获取数据。我会假设你这样做是有条不紊的,所以你会做这样的事情:

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

在您的控制器中

    Entry.create(params[:entry])

这就是从params哈希(由rails为你创建)中获取“entry”数据,并将其作为参数传递给Entry以初始化一个新Object。 “create”将在一次方法调用中为您执行“新建”和“保存”。

答案 1 :(得分:2)

我进行了测试并得到错误MultiJson::DecodeError (743: unexpected token at '{'content':'I belong to AAA','title':'AAA'}'):

JSON需要键和字符串的双引号,而不是单引号。试试--data '{"content":"I belong to AAA","title":"AAA"}'

答案 2 :(得分: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