2012-08-28 58 views
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頭文件中定義了字符集並嘗試了,但結果是一樣的。 任何人都可以幫助我嗎?

回答

4

這是關於編碼。您必須將請求的編碼設置爲UTF8。

+0

究竟如何?它是一個HTTP頭?另外,如何在使用捲曲時不必這樣做? – Timmmm

+0

沒關係;這是HTTP庫中使用的一個錯誤。雖然我仍然沒有將請求設置爲UTF-8,並且它可以工作(除非庫隱式地執行;'curl'自動將'; charset = utf-8'添加到'Content-type'頭部)。我正在使用cpp-netlib fwiw。 – Timmmm

+0

這解決了我使用Ruby中的libcurl;設置標題['Content-type'] ='application/json; charset = UTF = 8''解決了這個問題。 –

相關問題