0
我試圖從第三方服務器發送消息。當我在shell上使用curl命令發送http請求時,它可以工作,但是當我使用Ruby腳本執行同樣的操作時,我一直在收到「Missing Registration」錯誤。更具體地說,當I型Google雲消息傳遞第三方服務器在發送消息時出現「缺少註冊」錯誤
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」的錯誤消息。 (使用紅寶石版本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
}
我感覺圍繞字符編碼有一些問題。我在content-type頭文件中定義了字符集並嘗試了,但結果是一樣的。 任何人都可以幫助我嗎?
究竟如何?它是一個HTTP頭?另外,如何在使用捲曲時不必這樣做? – Timmmm
沒關係;這是HTTP庫中使用的一個錯誤。雖然我仍然沒有將請求設置爲UTF-8,並且它可以工作(除非庫隱式地執行;'curl'自動將'; charset = utf-8'添加到'Content-type'頭部)。我正在使用cpp-netlib fwiw。 – Timmmm
這解決了我使用Ruby中的libcurl;設置標題['Content-type'] ='application/json; charset = UTF = 8''解決了這個問題。 –