【问题标题】:POST JSON data to simple rails application with curl使用 curl 将 JSON 数据发布到简单的 Rails 应用程序
【发布时间】:2011-12-24 02:53:54
【问题描述】:

我使用脚手架设置了一个简单的带有模型条目的新 Rails 应用程序,具有 titlecontent 属性。

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

【问题讨论】:

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


    【解决方案1】:

    按照 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 以初始化新对象。 “创建”将在一个方法调用中为您执行“新建”和“保存”。

    【讨论】:

    • 问题已解决。非常感谢。乔纳森确实让我们走上了正确的道路。谢谢。
    【解决方案2】:

    获取一段 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
    

    【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 谢谢,但即使有您的建议,仍然会收到 743 错误。我想知道应用程序是否不希望或不喜欢我尝试发布的这个 json 数据。它是由 rails new 创建的一个简单的 rails 应用程序,模型是由 rails generate 脚手架。
    • 实际上,这个解决方案假设您想在请求正文中传递 JSON,这与像浏览器一样发布数据不同。要模仿浏览器,只需使用curl -d 'content=I belong to AAA' -d title=AAA http://localhost:3000/entries
    • 在 2011-11-09 07:46:48 -0500 为 127.0.0.1 开始 POST "/entries" 处理由 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, 2011 年 11 月 9 日 12:46:48 UTC +00:00]] 重定向到 localhost:3000/entries/46 完成 302 发现时间为 0 毫秒
    • 如您所见,它开始发布,但最终添加的数据为nil。
    • 我应该澄清一下我在 Windows 32 环境中。
    猜你喜欢
    • 2012-12-20
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多