【问题标题】:Converting curl to ruby equivalent将 curl 转换为 ruby​​ 等效项
【发布时间】:2013-03-14 07:04:34
【问题描述】:

我无法将 curl 转换为 ruby​​ 脚本。基本上我正在尝试使用 parse.com RESTful api。这是卷曲

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)

)

我收到一个错误代码 107,说 json 无效。任何建议将不胜感激。

【问题讨论】:

  • 为什么不使用Curb gem?这是 curl 库的 Ruby 接口。
  • 你的 channels 值不是一个数组,因为它在你的 curl 请求中 - 可能是服务正在期待一个并且结果抛出一个措辞非常糟糕的错误

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


【解决方案1】:

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

我认为这会起作用(我能看到的唯一可能的问题是您是否会在编写代码时通过 https 进行连接):

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

。 . . Ruby 数据结构中的类 JSON 格式是 not JSON,

foo: "bar"

只是 Ruby (1.9+) 的另一种说法

:foo => "bar"

【讨论】:

  • 我编辑了评论。我添加了端口 443,以便它可以通过 SSL,但是仍然存在无效 json 的问题
  • 您的 Ruby 结构现在与 curl 示例中的结构不同。尝试在“巨人”周围加上方括号,例如["Giants"],使其成为一个数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
相关资源
最近更新 更多