2013-03-14 130 views
2

我无法将curl转换为ruby脚本。基本上我试图使用parse.com RESTful API。这里是卷曲将curl转换为ruby等效

curl -X POST \ 
-H "X-Parse-Application-Id: XXX" \ 
-H "X-Parse-REST-API-Key: YYY" \ 
-H "Content-Type: application/json" \ 
-d '{ 
    "channels": [ 
    "Giants", 
    "Mets" 
    ], 
    "data": { 
    "alert": "test message" 
    } 
}' \ 
https://api.parse.com/1/push 

,这就是我一直试图做的(使用HttParty)

puts "hello world" 

require 'httparty' 

require 'json' 

class Parse 
    include HTTParty 
    base_uri "api.parse.com:443" 
    headers "X-Parse-Application-Id" => "XXX", "X-Parse-REST-API-Key" => "YYY", "Content-Type" => "application/json" 

end 

option = {:channels => "Giants", :data => {:alert => "un mensaje de mierda"}} 
puts Parse.post("/1/push", body: option.to_json) 

我越来越无效说JSON的错误代码107。任何建议将不胜感激。

+0

为什么不使用[路沿石(HTTPS的另一个Ruby(1.9+)的方式: //github.com/taf2/curb)宝石?这是一个用于卷曲库的Ruby界面。 – 2013-03-14 07:21:03

+0

你的'channels'值不是一个数组,因为它在你的curl请求中 - 可能是因为服务需要一个,并且因此引发了一个措辞非常糟糕的错误 – bdares 2013-03-15 03:53:37

回答

1

我想你只需要在第二个参数中将ruby结构序列化为JSON。参数应该是POST的字符串,而不是Ruby结构。

我认为这会工作(仅适用于其他可能的问题,我可以看到的是你是否会通过HTTPS连接的代码写入):

data = {"channels": ['Giants'], "data": {alert: 'un mensaje '}} 
puts Parse.post("/1/push", body: data.to_json) 

。 。 。在Ruby数据结构中的类JSON格式 JSON,

foo: "bar" 

只是说

:foo => "bar" 
+0

我编辑了评论。我添加了端口443,以便它可以通过SSL,但仍然存在无效json的问题 – fernandohur 2013-03-15 03:20:23

+0

现在,您的Ruby结构与curl示例中的结构不同。尝试在“巨人”周围放置方括号,例如[“巨人”],使其成为一个阵列。 – 2013-03-15 11:41:31