2013-03-14 127 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