我正在尝试从第三方服务器发送消息。当我在shell上使用curl命令发送http请求时,它可以正常工作,但是当我使用Ruby脚本做同样的事情时,我继续收到“Missing Registration”错误。更具体地说,当我输入
curl --header "Authorization: key=MY_KEY" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{\"registration_ids\":[\"MY_REGISTRATION_KEY\"], \"data\":{\"data1\":\"data1val\"}}"
我得到以下回复
{ “multicast_id”:5609541310450656515, “成功”:1, “失败”:0, “canonical_ids”:0 “结果”:[{ “MESSAGE_ID”: “0:1346184864739450%3083a1e3f9fd7ecd”}]} ,Android设备正确接收消息。
但是,如果我使用以下脚本,GCM服务器的响应会发送错误消息,如“Error = MissingRegistration”。 (使用ruby版本1.9.3)
require "net/https"
require "uri"
uri = URI.parse("https://android.googleapis.com/gcm/send")
https = Net::HTTP.new(uri.host, 443)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
https.start{|https|
request = Net::HTTP::Post.new(uri.path)
request["Authorization"] = "key=MY_KEY"
request["Content-Type"] = "application/json"
request.set_form_data({:registration_ids => ["MY_REGISTRATION_KEY"],
:data => {data1:"data1_val"}
})
response = https.request(request)
p response.body
p response.header
}
我觉得char编码存在一些问题。我在内容类型标题中定义了charset并尝试过,但结果是一样的。 任何人都可以帮助我吗?
答案 0 :(得分:4)
这是关于编码。您必须将请求的编码设置为UTF8。