0

我正在尝试从第 3 方服务器发送消息。当我在 shell 上使用 curl 命令发送 http 请求时,它可以工作,但是当我使用 Ruby 脚本做同样的事情时,我不断收到“缺少注册”错误。更具体地说,当我输入

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,"success":1,"failure":0,"canonical_ids":0,"results":[{"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
}

我觉得字符编码存在一些问题。我在内容类型标题中定义了字符集并尝试了,但结果是一样的。谁能帮我?

4

1 回答 1

4

这是关于编码的。您必须将请求的编码设置为 UTF8。

于 2012-11-09T18:04:01.830 回答